簡體   English   中英

java測試:加快測試超時的時間?

[英]java testing: accelerate time to test timeouts?

我有一個應用程序管理游戲中的轉彎,它相當復雜,它有很多計時器產生超時...因為它們很多互操作,所以很難確定一切正常(並保持正常工作)。

我想測試它,但某些超時是幾分鍾,完全測試它需要至少一個小時!

有沒有辦法偽造計時器的加速時間? 或者我應該按比例縮小所有超時,測試它們,然后每次再縮放它們?

謝謝!

一種方法是創建自己的接口,為Timer提供一個瘦包裝。 然后,您可以在代碼中的任何位置編程接口。 之后,您將進行兩個接口實現。 第一個是連接到當前實際Timer對象的預期實現。 另一個是你可以用來測試的。 在此實現中,您可以模擬Timer的功能,但您可以完全控制事件的觸發方式以及觸發事件的時間。 您可以根據@aioobe的建議縮放持續時間,或者您可以創建一個可以快速觸發事件的后備隊列,以便不會浪費時間。

關鍵是您不必更改實際代碼並使用依賴注入來進行測試所需的更改。

據我所知,沒有辦法全面擴展Java Timers的速度。 (假設它們依賴於System.currentTimeMillis方法,您可能會嘗試添加自己的bootclasspath並使用不同的東西覆蓋此實現,但這肯定是棘手的事情(如果它甚至可能)。)

我建議你在用於調試目的的時段和頻率前添加一個TIME_SCALING因子。

// ...
long period = (long) (someValue / TIME_SCALING);
// ...

// ...
double frequency = someValue * TIME_SCALING;
// ...

依靠計時器滴答在正確的時間發生很容易跟蹤和罕見的錯誤

我建議使用鎖,障礙,信號量等。 保證發生在所有事情之前的關系; 這需要更多的類之間的交互,但更加防彈(並允許程序在測試中運行得更快,只需要一個計時器,如果它太快)

也許你可以模擬計時器關閉的效果,並根據它檢查應用程序的狀態。 它無助於測試定時器,但它可以測試它們的效果。

我想到了一個簡單的方法..不是很好也許但仍然..我可以做aioobe說(TIME_SCALING)把它保持在類中私有,然后從測試使用反射訪問它..這種方式至少它可以'其他課程可以看到或使用..

我正在做同樣的事情,但是考慮通過搞亂Hotspot的內部來減慢JVM的速度。 它並不難,但如果做得不對,它可能會引入微妙的錯誤。 無論如何,我在這里發布了一個問題,並且有人提出了在VirtualBox中運行虛擬機的想法,並減慢了時間(在我的情況下,為了獲得額外的CPU時間)。 也許你可以在你的情況下加快時間,減少CPU時間,但提前完成測試。 或者可能是計時器的精度限制,或者VirtualBox只能減慢時間..嗯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM