一、创建测试目录结构:
一般在工程根目录下创建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即可;