TestNG
@Test(expectedExceptions = ArithmeticException.class) public void divisionWithException(){ int i = 1/0; }
4、忽略测试
忽略测试意思是在单元测试哪些是可以被忽略的,这个特性在两个框架都已经实现。 JUnit 4
@Ignore("Not Ready to Run") @Test public void divisionWithException() { System.out.println("Method is not ready yet"); }
TestNG
@Test(enabled=false) public void divisionWithException() { System.out.println("Method is not ready yet"); }
7、参数化测试
“参数化测试”是指单位测试参数值的变化。此功能在 JUnit 4 和 TestNG 中都实现。然而,两者都使用非常不同的方法来实现它。 Junit4 参数化测试:
步骤如下:
1.通过@parameters 标识静态参数构造方法
2.通过测试类构造方法引入参数
3.测试方法使用参数
@RunWith(value = Parameterized.class)
public class JunitTest {
private int number;
public JunitTest6(int number) {
this.number = number;
}
@Parameters
public static Collection<Object[]> data() {
Object[][] data = new Object[][] { { 1 }, { 2 }, { 3 }, { 4 } };
return Arrays.asList(data);
}
@Test
public void pushTest() {
System.out.println("Parameterized Number is : " + number);
}
}
缺点:
一个测试类只能有一个静态的参数构造方法;
测试类需要使用@RunWith(Parameterized.class),无法兼容 spring-test 的 runner
@RunWith(SpringJUnit4ClassRunner.class),会导致无法通过注解注入待测服务
需要在测试类中添加一个构造方法(一种冗余设计) TestNG 参数化测试:
步骤如下:
1.通过@dataProvider 注解标识参数构造方法
2.测试方法在注解@Test 中通过 dataProvider 属性指定参数构造方法,便可在测试方法中使用参数
@Test(dataProvider = "Data-Provider-Function")
public void parameterIntTest(Class clzz, String[] number) {
System.out.println("Parameterized Number is : " + number[0]);
System.out.println("Parameterized Number is : " + number[1]);
}
除此之外,TestNG 还支持通过 testng.xml 构造参数:
public class TestNGTest {
@Test @Parameters(value="number")
public void parameterIntTest(int number) {
System.out.println("Parameterized Number is : " + number);
}
}
XML 文件的内容如下:
<suite name="My test suite">
<test name="testing">
<parameter name="number" value="2"/>
<classes>
<class name="com.fsecure.demo.testng.TestNGTest" />
</classes>
</test>
</suite>
8、依赖测试
“参数化测试”表示方法是依赖性测试,它将在所需方法之前执行。如果依赖方法失败,则所有后续测试将会被跳过,不会被标记为失败。 JUnit 4
JUnit 框架着重于测试隔离; 目前它不支持此功能。 TestNG
它使用“dependOnMethods”来实现依赖测试如下
@Test public void method1() {
System.out.println("This is method 1");
}
@Test(dependsOnMethods={"method1"})
public void method2() {
System.out.println("This is method 2");
}