我有一組測試一些相應的時區相關功能的測試重新運行一組的JUnit測試多次
我有一個方法之前,設置默認的時區,以我的選擇之一,和方法之後恢復測試前的默認值。
所以我基本上要做到
設置時區爲UTC
運行測試
設置時區恢復區改爲EST
運行測試
還原時區
設置時區到JST
運行測試
還原時區
測試是在每種情況下是相同的。
有沒有簡單的方法來做到這一點?
我有一組測試一些相應的時區相關功能的測試重新運行一組的JUnit測試多次
我有一個方法之前,設置默認的時區,以我的選擇之一,和方法之後恢復測試前的默認值。
所以我基本上要做到
設置時區爲UTC
運行測試
設置時區恢復區改爲EST
運行測試
還原時區
設置時區到JST
運行測試
還原時區
測試是在每種情況下是相同的。
有沒有簡單的方法來做到這一點?
我使用參數化和RunWith記號解決了這個問題:
參見:http://ourcraft.wordpress.com/2008/08/27/writing-a-parameterized-junit-test/
是啊,有一個很好的方式,一遍又一遍地做同樣的再次測試,只需用一些其他的數據集。解決方案是「@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));
}
}
這裏是一個後我寫道,顯示了代碼示例多次運行測試的幾種方法: http://codehowtos.blogspot.com/2011/04/run-junit-test-repeatedly.html
您可以使用@Parametrized亞軍,或使用
中包含的特殊亞軍最近我創建了zohhak項目。你可能會覺得它很有用。它可以讓你寫:
@TestWith({
"EST",
"UTC",
"null"
})
public void testMethod(TimeZone timeZone) {
setTimeZone(timeZone);
...
}
@After
public void restoreTimezone() {
...
}