用Android studio可以很方便的完成代码的测试工作,比之前在Eclipse里面做测试方便多了,下面简单总结一下:
一、创建测试目录结构:
一般在工程根目录下创建androidTest文件夹,里面按照src包名结构创建目录,然后就可以创建测试文件了,如图:
也可以在module的build文件进行指定测试路径:
androidTest {
java.srcDirs = ['androidTest/java']
assets.srcDirs = ['androidTest/assets/']
}
二、创建测试文件:
新建XXXTest.Java,一般继承InstrumentationTestCase。
里面方法命名要注意,测试用例必须要以test开头,如果你要控制执行顺序,需要在test后面加有序的数字或字母,在执行的时候会按命名顺序执行,如:test1Query(),test2Insert()等等;
public class UtilsTest extends InstrumentationTestCase {
public void test1() throws Exception {
assertTrue(Utils.isValidUrl("http://www.qq.com"));
assertTrue(Utils.isValidUrl("www.qq.com/news?a=1"));
assertFalse(Utils.isValidUrl("http://*.qq.com"));
assertTrue(Utils.isValidUrl("http://www.qq.com/?a=1"));
assertTrue(Utils.isValidUrl("www.qq.com:80"));
assertTrue(Utils.isValidUrl("http://www.qq.com:80/news"));
assertTrue(Utils.isValidUrl("www.qq.com/news"));
assertTrue(Utils.isValidUrl("ftp://www.qq.com/news"));
assertTrue(Utils.isValidUrl("ftp://www.qq/news")); // We can't judge that whether the domain suffix is valid.
}
public void test2() throws Exception {
String[][] hosts =
{{"baidu.com", "http://baidu.com/?v=1"},
{"qq.com", "https://qq.com/?v=1"},
{"qq.com", "ftp://qq.com/?v=1"},
{"qq.com:80", "https://qq.com:80/?v=1"}
};
for (int i = 0; i < hosts.length; i++) {
assertEquals(hosts[i][0], Utils.extractHost(hosts[i][1]));
}
}
public void test3() throws Exception {
assertTrue(Utils.isValidRedirectUrl("http://www.qq.com"));
assertTrue(Utils.isValidRedirectUrl("https://www.163.com"));
}
}
三、注意事项:
如果要测试的接口里面有线程,一般以回调的方式展示,这时候要注意让测线程等待,否则测试主线程会提前退出,导致测试失败,可以用下面方法控制:
Object queryLock = new Object();
private void waitProcessing(){
try{
synchronized (queryLock){
queryLock.wait();
}
}catch (Exception e){
e.printStackTrace();
}
}
private void notifyProcessing() {
synchronized (queryLock) {
queryLock.notify();
}
}
四、运行:
运行整个测试用例,只需要在需要在文件上右键->run即可
运行单个case,在对应的方法中点击,右键->run即可;