If we wish to execute a shell command in android test, we may do this:
String command = "xxx";
Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
UiDevice mDevice = UiDevice.getInstance(instrumentation);
mDevice.executeShellCommand(command);
But if this command is unavailable, the test is likely to fail to complete:
Test run failed: Test run incomplete. Expected 1 tests, received 0
This error is probably caused by exception.
So perhaps check if the command exists first is necessary:
package com.mrvl.pck;
import android.app.UiAutomation;
import android.os.ParcelFileDescriptor;
import android.support.test.uiautomator.UiDevice;
import android.util.Log;
import java.io.IOException;
public class FakeMethod {
private static final String TAG = "FAKE";
int isCommandAvailable(UiDevice mDevice, String command) {
int statusCode;
try {
String result = mDevice.executeShellCommand("which " + command);
if (result.equals("")) {
statusCode = 1;
} else {
statusCode = 2;
}
} catch (IOException e) {
e.printStackTrace();
statusCode = 3;
}
return statusCode;
}
}
package com.mrvl.pck;
import android.app.Instrumentation;
import android.app.UiAutomation;
import android.support.test.InstrumentationRegistry;
import android.support.test.uiautomator.UiDevice;
import android.util.Log;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Test;
public class FakeTest {
Instrumentation instrumentation = InstrumentationRegistry.getInstrumentation();
UiDevice mDevice = UiDevice.getInstance(instrumentation);
private static final String TAG = "FAKE";
FakeMethod fakeMethod = new FakeMethod();
UiAutomation mUiAutomation = instrumentation.getUiAutomation();
@After
public void tearDown() throws Exception {
Log.i(TAG, "Tear down");
}
@Test
public void testFakeMethod() {
int statusCode_1 = fakeMethod.isCommandAvailable(mDevice, "ifccnfig");
if (statusCode_1 == 2) {
Log.i(TAG, "True");
} else if (statusCode_1 == 1){
Log.i(TAG, "False");
} else {
Log.i(TAG, "Error");
}
int statusCode_2 = fakeMethod.isCommandAvailable(mDevice, "ifconfig");
if (statusCode_2 == 2) {
Log.i(TAG, "True");
} else if (statusCode_2 == 1){
Log.i(TAG, "False");
} else {
Log.i(TAG, "Error");
}
}
}
Output:
I FAKE : False
I FAKE : True
I FAKE : Tear down
网友评论