Android Studio中的单元测试(一)Java测试

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u013254166/article/details/80612127

一、概述

      单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软件的独立单元将在与程序的其他部分相隔离的情况下进行测试。

为什么要做单元测试?

  • 更早发现问题
  • 更容易集成
  • 更安全的代码修改

单元测试的原则与模式

  • 把测试当做文档(针对Api)
  • 所有单元测试都是自检查的
  • 不要单独为测试创建特别的逻辑
  • 尽可能保证单元测试的简单性

二、APP目录介绍

     

      src/test:  运行在本地电脑Java虚拟机上的单元测试,适合做一些java接口的测试;
      src/androidTest: 运行在手机或者模拟器上,适合做一些ui测试或者逻辑测试。

三、配置

      我们需要在app目录gradle中添加依赖,java测试添加下面依赖即可,Android测试要复杂一些,下篇文章Android Studio中的单元测试(二)Android测试会详细讲解。

dependencies {
    ...
    testImplementation 'junit:junit:4.12'
}

四、Annotation

Annotation描述
@Test public void method()定义所在方法为单元测试方法
@Test (expected = Exception.class)如果所在方法没有抛出Annotation中的Exception.class->失败
@Test(timeout=100)如果方法耗时超过100毫秒->失败
@Test(expected=Exception.class)如果方法抛了Exception.class类型的异常->通过
@Before public void method()这个方法在每个测试之前执行,用于准备测试环境(如: 初始化类,读输入流等)
@After public void method()这个方法在每个测试之后执行,用于清理测试环境数据
@BeforeClass public static void method()这个方法在所有测试开始之前执行一次,用于做一些耗时的初始化工作(如: 连接数据库)
@AfterClass public static void method()这个方法在所有测试结束之后执行一次,用于清理数据(如: 断开数据连接)
@Ignore或者@Ignore("Why disabled")忽略当前测试方法,一般用于测试方法还没有准备好,或者太耗时之类的
@FixMethodOrder(MethodSorters.NAME_ASCENDING) public class TestClass{}使得该测试方法中的所有测试都按照方法中的字母顺序测试
@Assume.assumeFalse(boolean condition)如果满足condition,就不执行对应方法

      一个测试类单元测试的执行顺序为:
      @BeforeClass –> @Before –> @Test –> @After –> @AfterClass

      每一个测试方法的调用顺序为:
      @Before –> @Test –> @After

五、断言

      断言,它的作用是比较实际的值和用户预期的值是否一样,assertEquals在JUnit中有很多不同的实现,下面是一些接口的介绍:

接口说明
assertArrayEquals(expecteds, actuals)查看两个数组是否相等。
assertEquals(expected, actual)查看两个对象是否相等。类似于字符串比较使用的equals()方法
assertNotEquals(first, second)查看两个对象是否不相等。
assertNull(object)查看对象是否为空。
assertNotNull(object)查看对象是否不为空。
assertSame(expected, actual)查看两个对象的引用是否相等。类似于使用“==”比较两个对象
assertNotSame(unexpected, actual)查看两个对象的引用是否不相等。类似于使用“!=”比较两个对象
assertTrue(condition)查看运行结果是否为true。
assertFalse(condition)查看运行结果是否为false。
assertThat(actual, matcher)查看实际值是否满足指定的条件
fail()让测试失败

六、栗子

      首先增加一个计算的工具类Calculator.java,添加了一个求和方法,用于接下来的单元测试。这里只介绍了一个简单的栗子,详细介绍可以参照junit4官网

public class Calculator {

    public double sum(double a, double b) {
        return a + b;
    }
    
}

      现在我们可以鼠标右键空白处,选择Test,选择Create New Test...

     

     

      这里可以选择需要测试的接口,以及选择是否生成setUp和tearDown方法,setUp会在测试启动的时候被调用,tearDown会在测试结束的时候被调用,点击OK,然后选择src/test目录。

     

      我们将自动生成的CalculatorTest.java稍做修改,如下:

public class CalculatorTest {

    Calculator calculator;

    @Before
    public void setUp() throws Exception {
        System.out.println("setUp");
        calculator = new Calculator();
    }

    @After
    public void tearDown() throws Exception {
        System.out.println("tearDown");
    }

    @Test
    public void sum() {
        assertEquals(2, calculator.sum(1, 1), 0);
    }
}

      现在我们可以开始进行测试了,右键CalculatorTest.java。

     

      点击Run 'CalculatorTest',可以看到如下结果,代表测试通过了。

     

      现在我们修改一下sum方法,如下:

@Test
public void sum() {
	assertEquals(1, calculator.sum(1, 1), 0);
}

      再次run,结果如下:

     

      显然1+1不等于期望值1,所以报错了,这样就达到我们单元测试的目的。

七、DEMO下载地址

点击下载


感谢:

      https://www.cnblogs.com/myhomepages/p/6014285.html

      https://blog.csdn.net/wangpeng047/article/details/9628449


展开阅读全文

没有更多推荐了,返回首页