我需要爲永不結束的main()方法編寫JUnit測試用例。處理某些文件後,這個main()方法會休眠一分鐘,然後繼續執行。這個過程繼續,繼續。如何覆蓋失敗的JUnit測試用例的行爲
我用下面的代碼寫的JUnit它:
@Test (timeout = 10000)
public void testMainMethod()
{
ClassName.main(null);
assertEquals(true, true);
}
並沒有驚喜,我的測試案例失敗,java.lang.Exception的:後10000毫秒消息測試超時。即使main()方法按預期工作,該測試用例也將因超時異常而失敗。我怎麼能重寫這個失敗的測試用例的行爲,以便在超時異常的情況下,它應該顯示結果爲「成功」這個測試用例。
編輯 的實際要求是: 我需要從一個特定的位置搜索文件,如有發現任何,然後將其移動到不同的文件夾中。這個搜索應該每30分鐘完成一次。爲此,我使用了下面的代碼:
public class FaxProcessor {
public static void main(String[] args) {
LOGGER.info("*** Starting Fax Server Processor ***");
int poll_time = 1800000;
LOGGER.info("Poll Time set to " + poll_time + " millisec");
FaxProcessor faxProcessor = new FaxProcessor();
while (true) {
try {
if(LOGGER.debugEnabled()){
LOGGER.debug("Starting new pass of fax processor");
}
faxProcessor.startProcessing();
} catch (Exception e) {
LOGGER.error("Processing Error", e);
} finally {
try {
// Wait for next loop
Thread.sleep(poll_time);
} catch (InterruptedException e) {
LOGGER.error("Thread Exception", e);
}
}
}
}
// startProcessing and other private methods here
}
最大的問題是,我只有一個公共方法{main()方法}和所有其他人都是私人,所以我不能寫JUnit測試用例他們。另外,main()方法不會返回任何東西,它只會將文件從一個文件夾移動到另一個文件夾,並且如果它在一次傳遞中移動文件失敗,它將嘗試在下一個傳遞中執行相同的操作。因此,使用JUnit測試用例,我只想檢查整個過程中是否發生意外異常。
如果我不會在JUnit中指定超時,那麼測試用例永遠不會完成。一旦發生超時,我想檢查測試用例是否由於Timeout異常而完成,或者是否有其他異常來自於引發JUnit測試用例的main()方法。
如果是超時異常,這意味着,我的程序中的所有內容都沿着正確的方向運行,直到超時發生,所以測試用例應該成功。在所有其他情況下,它應該顯示FAILED爲JUnit狀態。
這很混亂。 1)爲什麼總會有成功的assertEquals()?只是把它留下。 2)你想測試什麼?該main()運行至少10'000毫秒,而不拋出異常? 3)你如何從main()返回?也許你應該通過一個參數,告訴它在一定數量的循環後停止。 –
單元測試不是黑盒測試!良好的單元測試是白盒測試,所以您應該測試主要方法中發生的步驟(這應該是其他方法)。 –