JUnit

前言

单元测试的规划时间应该在接口设计完成后、编码开始前

注解

以下常用注解修饰的方法被按照顺序执行
@BeforeClass
@Before
@Test
@After
@AfterClass
其中@BeforeClass和@AfterClass只会执行一次,并且必须是static void的;而@Before和@After会在每个@Test前后被执行,且必须是public void的
@Test注解可以指定必须抛出的异常(expected属性)、指定超时时间(timeout属性)

断言assert

assertTrue()
assertFalse()
assertEquals():调用equals方法
assertSame():判断地址是否相同
assertNull

参数化测试

测试类使用@RunWith(Parameterized.class)修饰
生成测试数据的方法使用@Paramters修饰,返回类型为Collection<Object[]>
使用@Parameter修饰需要注入的参数(来源是上述集合),可以指定下标

@RunWith(Parameterized.class)
public class CalculatorTest {

    @Parameters
    public static Collection<Object[]> data() {
        return Arrays.asList(new Object[][]{
            {1, 2, 3}, {4, 5, 9}, {9, 10, 19}, {112, 234, 346}
        });
    }

    @Parameter(0)
    public double a;
    @Parameter(1)
    public double b;
    @Parameter(2)
    public double expected;

    @BeforeClass
    public static void beforeClass() {
        System.out.println("Before Class");
    }

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


    @Test
    public void testAdd() {
        assertEquals(expected, new Calculator().add(a, b), 0.001);
    }

    @Test
    public void testDivide() {
        assertEquals(2, new Calculator().divide(4, 2), 0.001);
    }

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

    @AfterClass
    public static void afterClass() {
        System.out.println("After Class");
    }
}

单个测试数据

返回Iterable或者Object数组

@Parameters
public static Iterable<? extends Object> data() {
    return Arrays.asList("first test", "second test");
}

or

@Parameters
public static Object[] data() {
    return new Object[] { "first test", "second test" };
}

区分每组测试数据

在@Parameters注解中为魅族测试用例指定名称,占位符如下:
{index} 测试用例编号
{0}, {1}, {2}.... 参数编号

@Parameters(name = "No.{index}:{0}+{1}?={2}")

多线程测试

测试类之间存在继承关系

被重写的方法不会被执行,否则先执行父类的再执行子类的

posted @ 2019-08-24 16:36  darknessplus  阅读(123)  评论(0编辑  收藏  举报