2013-04-01 33 views
1

我正在爲我的應用程序設計一些測試用例。假設我所說的方法性能基準測試是否屬於JUnit領域?

ProcessedDataObject createProcessedDataObject(RawDataHolder input)

createProcessedDataObject的性能是至關重要的,所以我想包括針對不斷投入一些基準性能測試(例如,從本地文本文件建立input所以它不會改變)並且如果該方法的每個未來修改需要超過一定數量的毫微秒,則失敗。 IOW,我希望測試的目的是爲了提高紅旗,以防未來的變化增加複雜性,超過時間基準。

我的問題是:基準性能測試屬於JUnit的領域還是應該保持在外面?

+1

我會說這是一個意見。更迫切的問題是:無論框架如何,您是否可以建立一個可以進行可靠且有意義的自動化性能迴歸測試的環境? –

+0

那麼,你會說如果確保這樣一個穩定的沙箱環境太過移動的目標,那麼這將使這種測試無效爲單元測試? – amphibient

+1

我不會爲此任務使用JUnit - 它很難讓基準測試成爲一個穩定的起點,特別是如果您的測試將作爲套件(其他測試)的一部分運行。 – Perception

回答

2

如果你只是在尋找一個球場估計,那麼JUnit是好的。但是,您不希望在構建時使用的測試套件中包含基準測試,因爲這會降低構建速度。如果你想發佈你的基準,那麼在我看來,JUnit不應該被使用。

1

我建議你將測試用例分爲功能單元測試和非功能性集成測試。如果您使用Maven,則可以使用Surefire + Failsafe來實現此目的。您仍然可以將性能測試編寫爲JUnit測試,但通過這種方式,您可以將它們邏輯分開,以便將功能和性能測試分開。

沒有太多瞭解您的實現,我會假設你的性能測試實際上是集成測試,反正...

而作爲意見建議,你需要小心你的合格/失敗標準和您的閾值。

例如如果我的測試極限是100納米,並且需要101納米,那麼不能接受足以造成構建失敗?我應該運行相同的測試10次並取平均值嗎?我應該運行相同的測試10次,並確保每次都低於閾值?我應該做多少次測試?所有這些(以及更多)都是你應該做的考慮。

+0

我如何將它們分成不同的類別?請參閱我的新帖,它正好處理:http://stackoverflow.com/questions/15755389/running-benchmark-methods-in-a-junit-test-class – amphibient