Java 多次重新运行一组JUnit测试
我有一套测试来测试timzeone的相关功能 我有一个Before方法将默认时区设置为我选择的时区之一,还有一个after方法将恢复测试之前的默认时区 所以我基本上想做 将时区设置为UTC 运行测试 恢复时区 将时区设置为EST 运行测试 恢复时区 将时区设置为JST 运行测试 恢复时区 每种情况下的测试都是相同的Java 多次重新运行一组JUnit测试,java,junit,Java,Junit,我有一套测试来测试timzeone的相关功能 我有一个Before方法将默认时区设置为我选择的时区之一,还有一个after方法将恢复测试之前的默认时区 所以我基本上想做 将时区设置为UTC 运行测试 恢复时区 将时区设置为EST 运行测试 恢复时区 将时区设置为JST 运行测试 恢复时区 每种情况下的测试都是相同的 有没有一种简单的方法可以做到这一点?我通过使用参数化和RunWith符号解决了这个问题: 请参阅:是的,有一种很好的方法可以反复进行相同的测试,只需使用其他数据集即可。解决方案是“@
有没有一种简单的方法可以做到这一点?我通过使用参数化和RunWith符号解决了这个问题:
请参阅:是的,有一种很好的方法可以反复进行相同的测试,只需使用其他数据集即可。解决方案是“@RunWith(Parameterized.class)”-。我假设您使用的是JUnit4,但我记得TestNG也有这样的功能 您需要编写的代码有点像这样:
@RunWith(Parameterized.class)
public class FibonacciTest {
@Parameters
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][] {
Fibonacci,
{ { 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(@HeresHowYouGetValue Type value) {
assertAnswerKey(new Object[][] {
Fibonacci,
{ { 0, 0 }, { 1, 1 }, { 2, 1 }, { 3, 2 }, { 4, 3 }, { 5, 5 },
{ 6, 8 } } });
assertEquals(fExpected, Fibonacci.compute(fInput));
}
}
@RunWith(参数化的.class)
公共级光纤通信测试{
@参数
公共静态收集数据(){
返回Arrays.asList(新对象[][]{
斐波那契,
{ { 0, 0 }, { 1, 1 }, { 2, 1 }, { 3, 2 }, { 4, 3 }, { 5, 5 },
{ 6, 8 } } });
}
私有int fInput;
预期的私有整数;
公共FibonacciTest(int输入,int预期){
fInput=输入;
预期=预期;
}
@试验
公共无效测试(@HeresHowYouGetValue类型值){
assertAnswerKey(新对象[][]{
斐波那契,
{ { 0, 0 }, { 1, 1 }, { 2, 1 }, { 3, 2 }, { 4, 3 }, { 5, 5 },
{ 6, 8 } } });
assertEquals(预期的,斐波那契计算(fInput));
}
}
下面是我写的一篇文章,它展示了使用代码示例重复运行测试的几种方法:
您可以使用@Parameterized runner,也可以使用我最近创建的项目中包含的特殊runner。你会发现它很有用。它可以让你写:
@TestWith({
"EST",
"UTC",
"null"
})
public void testMethod(TimeZone timeZone) {
setTimeZone(timeZone);
...
}
@After
public void restoreTimezone() {
...
}