Android本地单元测试基础,教你创建测试类

发表于:2021-1-06 09:39

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:chenxibobo    来源:博客园

  Android单元测试主要分为以下两种:  
  ·本地单元测试(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),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号