2010-11-11 48 views
2

我有一組測試一些相應的時區相關功能的測試重新運行一組的JUnit測試多次

我有一個方法之前,設置默認的時區,以我的選擇之一,和方法之後恢復測試前的默認值。

所以我基本上要做到

設置時區爲UTC

運行測試

設置時區恢復區改爲EST

運行測試

還原時區

設置時區到JST

運行測試

還原時區

測試是在每種情況下是相同的。

有沒有簡單的方法來做到這一點?

回答

5

是啊,有一個很好的方式,一遍又一遍地做同樣的再次測試,只需用一些其他的數據集。解決方案是「@RunWith(Parameterized.class)」 - link to javadoc。我假設你正在使用JUnit 4 - 但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)); 
     } 
} 
0

中包含的特殊亞軍最近我創建了zohhak項目。你可能會覺得它很有用。它可以讓你寫:

@TestWith({ 
    "EST", 
    "UTC", 
    "null" 
}) 
public void testMethod(TimeZone timeZone) { 
    setTimeZone(timeZone); 
    ... 
} 

@After 
public void restoreTimezone() { 
    ... 
}