参数化测试是一个JUnit 3不具备的功能。
基本使用方法:
一.@RunWith
当类被@RunWith注解修饰,或者类继承了一个被该注解修饰的类,JUnit将会使用这个注解所指明的运行器(runner)来运行测试,而不是JUnit默认的运行器。
文档中的例子
Class Parameterized的文档中有一个Fibonacci(斐波那契)的例子:
斐波纳契数列,又称黄金分割数列,指的是这样一个数列:1、1、2、3、5、8、13、21、……在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)。
For example, to test a Fibonacci function, write:
FibonacciTest.java
package com.bijian.study; import static org.junit.Assert.*; import java.util.Arrays; import java.util.Collection; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; @RunWith(Parameterized.class) public class FibonacciTest { @Parameters public static Collection data() { return Arrays.asList(new Object[][] { { 0, 0 }, { 1, 1 }, { 2, 1 }, { 3, 2 }, { 4, 3 }, { 5, 5 }, { 6, 8 } }); } private int fInput; private int fExpected; public FibonacciTest(int input, int expected) { fInput = input; fExpected = expected; } @Test public void test() { assertEquals(fExpected, Fibonacci.compute(fInput)); } }
Fibonacci.java
package com.bijian.study; public class Fibonacci { public static int compute(int n) { if (n < 0) { return -1; } if (n == 0 || n == 1) { return n; } return compute(n - 2) + compute(n - 1); } }
单元测试结果:
二.@RunWith (Parameterized.class)
要进行参数化测试,需要在类上面指定如下的运行器:
@RunWith (Parameterized.class)
然后,在提供数据的方法上加上一个@Parameters注解,这个方法必须是静态static的,并且返回一个集合Collection。
在测试类的构造方法中为各个参数赋值,(构造方法是由JUnit调用的),最后编写测试类,它会根据参数的组数来运行测试多次。
参数化测试实例:还以Calculator类作为例子
Calculator.java
package com.bijian.study; public class Calculator { public int add(int a, int b) { return a + b; } public int subtract(int a, int b) { return a - b; } public int multiply(int a, int b) { return a * b; } public int divide(int a, int b) throws Exception { if (0 == b) { throw new Exception("除数不能为0"); } return a / b; } }
参数化测试加法的类:ParametersTest.java
package com.bijian.study; import java.util.Arrays; import java.util.Collection; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; @RunWith(Parameterized.class) // 指定运行器runner:使用参数化运行器来运行 public class ParametersTest { private int expected;// 期待的结果值 private int input1;// 参数1 private int input2;// 参数2 private Calculator calculator = null; @Parameters public static Collection prepareData() { // 测试数据 Object[][] objects = { { 3, 1, 2 }, { -4, -1, -3 }, { 5, 2, 3 }, { 4, -4, 8 } }; return Arrays.asList(objects);// 将数组转换成集合返回 } @Before public void setUp() { calculator = new Calculator(); } public ParametersTest(int expected, int input1, int input2) { // 构造方法 // JUnit会使用准备的测试数据传给构造函数 this.expected = expected; this.input1 = input1; this.input2 = input2; } @Test public void testAdd() { Assert.assertEquals(this.expected, calculator.add(this.input1, this.input2)); } }
单元测试结果:
文章来源:http://www.cnblogs.com/mengdd/archive/2013/04/13/3019336.html
相关推荐
4. **Service测试类**:使用Junit参数化测试验证Service类的各个方法。 在Service测试类中,你可能会看到类似如上的参数化测试结构,测试数据可能是从数据库查询的结果、固定的数组或文件读取的数据。每个测试用例...
### JUnit参数化测试的使用方法 #### 一、引言 JUnit是Java开发中最常用的单元测试框架之一,它提供了一种简单的方式来编写可重复执行的测试案例。随着软件复杂度的增加,对于某些功能模块可能需要多次使用不同的...
在Eclipse中使用JUnit4进行单元测试是一种常见的Java开发实践,它可以帮助开发者确保代码的正确性和稳定性。单元测试是软件开发中的重要环节,通过编写针对代码各个独立模块的测试用例,可以验证代码功能是否按预期...
5. **参数化测试**:`@Parameterized`测试可以使用不同的参数多次运行同一个测试方法,这对于测试多种输入情况非常有用。 6. **超时测试**:`@Test(timeout = 1000)`可以设置测试方法的执行时间限制,超过设定时间...
JUnit支持注解、参数化测试、异常测试等特性,使得编写和执行单元测试变得更加简单。 4. **自动化测试**:自动化测试是指通过软件工具自动执行预先编写的测试脚本来检查程序功能是否正确的一种方法。相比手动测试,...
其次,JUnit4支持参数化测试,这意味着一个测试方法可以使用不同的参数多次执行。`@Parameters`注解用于提供参数数据,`@Parameterized.Parameters`方法返回一个包含参数的集合。 异常测试也是JUnit4的一个重要特性...
除此之外,JUnit4还支持参数化测试,通过`@Parameters`注解和`parameters()`方法可以为测试方法提供多组输入数据,实现对同一函数的多次测试。这对于测试具有多种输入情况的函数非常有用。 异常测试也是JUnit4的一...
JUnit4相较于早期版本引入了许多改进,如注解、参数化测试和测试套件等,使得测试代码更加简洁和灵活。 2. 注解(Annotations): JUnit4的核心特点是广泛使用注解,这使得测试类和方法的声明更清晰。例如: - `@...
参数化测试允许对同一测试用例使用不同的输入数据,而假设测试允许在不满足特定条件时跳过测试。定时器则可以设置测试方法的超时时间,防止无限循环。 总之,Junit作为Java的单元测试框架,提供了丰富的功能和良好...
### 四、参数化测试 JUnit4的`@Parameters`注解和`Parameterized`测试类可以实现参数化的测试,即用不同的输入数据多次运行同一个测试。 ```java @RunWith(Parameterized.class) public class ParameterizedTest {...
以上代码展示了如何使用JUnit 4.5进行参数化测试,测试`Calculator`类的`add`方法。 ### 总结 JUnit 4.5作为Java单元测试的重要工具,通过注解、参数化测试等特性极大地简化了测试编写,提高了测试效率。理解并熟练...
在实际项目中,开发者通常会配合使用`@RunWith`注解来选择测试运行器(Test Runner),比如`@RunWith(Suite.class)`或`@RunWith(Parameterized.class)`,以实现更复杂的测试场景,如组合测试或参数化测试。...
通过深入学习和实践这个"Junit4教程.doc"文档,开发者可以掌握如何有效地使用Junit4进行单元测试,提高代码的健壮性和可维护性。同时,了解单元测试的原理和最佳实践,也有助于提升编程能力,成为一名更专业的Java...
其次,JUnit4支持参数化测试,允许使用不同的输入数据执行同一个测试方法。这通过`@Parameters`注解和相关的静态方法实现,可以大大提高测试覆盖率,确保代码对各种可能的输入都能正确处理。 再者,JUnit4引入了...
JUnit4还支持参数化测试、异常测试等多种测试场景,使得测试更加灵活和全面。 接下来,Ant是一个基于XML的构建工具,用于自动化Java项目中的编译、打包、测试等任务。在Spring和JUnit4的测试环境中,Ant通常被用来...
在实际项目中,可能还需要引入Mockito等工具对依赖进行模拟,以及使用持续集成工具进行自动化测试。 总结,Junit4使得Java的单元测试变得简单而直观。通过注解,我们可以快速定义测试方法,结合断言库进行结果验证...
1. **创建参数化测试类**:首先,我们需要创建一个测试类,并使用`@RunWith(Parameterized.class)`注解,声明这是一个参数化的测试类。 2. **定义公共静态方法来提供参数**:这个方法应该返回一个`Collection`对象,...
通过名为`junit4Demo`的压缩包文件,我们可以看到一系列的JUnit4测试示例,包括基础的断言测试、异常测试、超时测试、参数化测试等。通过对这些示例的实践,开发者可以深入理解JUnit4的各种用法,并将其应用于日常的...