Java 多次重新运行一组JUnit测试

Java 多次重新运行一组JUnit测试,java,junit,Java,Junit,我有一套测试来测试timzeone的相关功能 我有一个Before方法将默认时区设置为我选择的时区之一,还有一个after方法将恢复测试之前的默认时区 所以我基本上想做 将时区设置为UTC 运行测试 恢复时区 将时区设置为EST 运行测试 恢复时区 将时区设置为JST 运行测试 恢复时区 每种情况下的测试都是相同的 有没有一种简单的方法可以做到这一点?我通过使用参数化和RunWith符号解决了这个问题: 请参阅:是的,有一种很好的方法可以反复进行相同的测试,只需使用其他数据集即可。解决方案是“@

我有一套测试来测试timzeone的相关功能

我有一个Before方法将默认时区设置为我选择的时区之一,还有一个after方法将恢复测试之前的默认时区

所以我基本上想做

将时区设置为UTC

运行测试

恢复时区

将时区设置为EST

运行测试

恢复时区

将时区设置为JST

运行测试

恢复时区

每种情况下的测试都是相同的


有没有一种简单的方法可以做到这一点?

我通过使用参数化和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() {
  ...
}