·本地单元测试(Junit Test), 本地单元测试是纯java代码的测试,只运行在本地电脑的JVM环境上,不依赖于Android框架的任何api, 因此执行速度快,效率较高,但是无法测试Android相关的代码。
·仪器化测试(Android Test),是针对Android相关代码的测试,需要运行在真机设备或模拟器上,运行速度较慢,但是可以测试UI的交互以及对设备信息的访问,得到接近真实的测试结果。
在Android Studio中新建一个项目的时候,app的gradle中会默认添加单元测试的相关依赖库:
dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) testImplementation 'junit:junit:4.12' androidTestImplementation 'com.android.support.test:runner:1.0.2' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2' } |
其中testImplementation添加的依赖就是本地化测试库, androidTestImplementation 添加的依赖则是Android环境下的测试库,同时,在项目的工程目录下也会默认创建好测试的目录:
其中app/src/test/下面存放的是Junit本地测试代码,app/src/androidTest/下面存放的是Android测试代码。
本地单元测试
进行本地单元测试需要先了解一些基本的Junit注解:
创建测试类
接下来就可以创建测试类,除了可以手动创建测试类外,可以利用AS快捷键:将光标选中要创建测试类的类名上->按下ALT + ENTER->在弹出的弹窗中选择Create Test。
这会弹出下面的弹窗,或者鼠标在类名上右键选择菜单Go to–>Test,也会弹出下面的弹窗。
勾选需要进行测试的方法,会自动生成一个测试类:
如果勾选了@Before或@After的话也会自动给你生成对应的测试方法。
接下来编写测试方法,首先在要测试的目标类中写几个业务方法:
public class SimpleClass { public boolean isTeenager(int age) { if (age < 15) { return true; } return false; } public int add(int a, int b) { return a + b; } public String getNameById(int id) { if (id == 1) { return "小明"; } else if (id == 2){ return "小红"; } return ""; } } |
然后,测试类:
@RunWith(JUnit4.class) public class SimpleClassTest { private SimpleClass simpleClass; @Before public void setUp() throws Exception { simpleClass = new SimpleClass(); } @After public void tearDown() throws Exception { } @Test public void isTeenager() { Assert.assertFalse(simpleClass.isTeenager(20)); Assert.assertTrue(simpleClass.isTeenager(14)); } @Test public void add() { Assert.assertEquals(simpleClass.add(3, 2), 5); Assert.assertNotEquals(simpleClass.add(3, 2), 4); } @Test public void getNameById() { Assert.assertEquals(simpleClass.getNameById(1), "小明"); Assert.assertEquals(simpleClass.getNameById(2), "小红"); Assert.assertEquals(simpleClass.getNameById(10), ""); } } |
其中setUp()是自动生成的添加了@Before注解,这会在每个测试方法执行前执行,因此在这里创建一个目标对象,也可以选择添加@BeforeClass注解但这时setUp()应该改为静态的方法。然后在每个测试方法中编写测试用例,这里使用org.junit.Assert包中的断言方法,有很多assertXXX方法,可以自己选择用来判断目标方法的结果是否满足预期。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理