Junit写出add,substract,multiply,divide,square的参数化测试程序
时间: 2023-10-02 20:05:17 浏览: 93
基于JUnit的全局单元测试程序
好的,以下是使用JUnit 5写出的参数化测试代码:
```java
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.util.Arrays;
import java.util.List;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
public class MathUtilsTest {
@DisplayName("add方法的参数化测试")
@ParameterizedTest(name = "{index} => a={0}, b={1}, expected={2}")
@MethodSource("addTestDataProvider")
void add(double a, double b, double expected) {
assertEquals(expected, MathUtils.add(a, b));
}
static List<Arguments> addTestDataProvider() {
return Arrays.asList(
Arguments.of(1, 2, 3),
Arguments.of(-1, -2, -3),
Arguments.of(0, 0, 0)
);
}
@DisplayName("subtract方法的参数化测试")
@ParameterizedTest(name = "{index} => a={0}, b={1}, expected={2}")
@MethodSource("subtractTestDataProvider")
void subtract(double a, double b, double expected) {
assertEquals(expected, MathUtils.subtract(a, b));
}
static List<Arguments> subtractTestDataProvider() {
return Arrays.asList(
Arguments.of(1, 2, -1),
Arguments.of(-1, -2, 1),
Arguments.of(0, 0, 0)
);
}
@DisplayName("multiply方法的参数化测试")
@ParameterizedTest(name = "{index} => a={0}, b={1}, expected={2}")
@MethodSource("multiplyTestDataProvider")
void multiply(double a, double b, double expected) {
assertEquals(expected, MathUtils.multiply(a, b));
}
static List<Arguments> multiplyTestDataProvider() {
return Arrays.asList(
Arguments.of(1, 2, 2),
Arguments.of(-1, -2, 2),
Arguments.of(0, 0, 0)
);
}
@DisplayName("divide方法的参数化测试")
@ParameterizedTest(name = "{index} => a={0}, b={1}, expected={2}")
@MethodSource("divideTestDataProvider")
void divide(double a, double b, double expected) {
assertEquals(expected, MathUtils.divide(a, b));
}
static List<Arguments> divideTestDataProvider() {
return Arrays.asList(
Arguments.of(4, 2, 2),
Arguments.of(-4, -2, 2),
Arguments.of(0, 2, 0)
);
}
@DisplayName("square方法的参数化测试")
@ParameterizedTest(name = "{index} => a={0}, expected={1}")
@MethodSource("squareTestDataProvider")
void square(double a, double expected) {
assertEquals(expected, MathUtils.square(a));
}
static List<Arguments> squareTestDataProvider() {
return Arrays.asList(
Arguments.of(2, 4),
Arguments.of(-2, 4),
Arguments.of(0, 0)
);
}
}
```
以上代码中,我们使用了JUnit 5的`@ParameterizedTest`注解和`@MethodSource`注解来对每个函数进行参数化测试。其中,`@MethodSource`注解用来指定一个方法,这个方法返回一个包含多个测试用例的`List<Arguments>`对象。在测试函数内部,我们可以使用这些参数进行测试并验证结果是否符合预期。
阅读全文