[英]Should I unit test code with no obvious returns from methods?
我有一個類,唯一的目的是從接口上運行其他類的方法。
測試類的接口是沒有問題的,但是運行器實際上並沒有做任何事情(並且就其而言)傳遞給構造函數的唯一參數是保持私有的。
在我的例子中,類將文本文件導入數據庫。
internal DataImporter
{
private List<IFileImporter> _importers;
public DataImporter(List<IFileImporter> importers){
_importers = importers;
public bool RunImporters()
{
//foreach importer, call its "Run" method - each one then does whatever it needs to do
//however, this need not call a specific "Run" method on IFileImporter
//I have another app that uses IFileImporter to check for presence of a file first
//then allow user to choose to import or not.
}
在我看來這里沒有什么可以測試的? 我無法測試_importers
的值,我不想為了測試而公開JUST。 DataImporter特定於此實例,因此創建接口似乎沒有任何好處。
我在其他地方重新使用了IFileImporters,但這是唯一的“批量”導入程序,其他的是從winforms應用程序手動調用,還有一些根本不在這個項目中。
那么,我需要測試一下......我可以測試一下這個嗎?
簡而言之,是的。 我可以想到我的頭腦中的一些測試。
您的測試通過模擬您在構造函數中傳遞的IFileImporters來確保調用所有導入程序。 它至少斷言你在構造函數中傳遞的內容實際上是由方法使用的。
測試以確保如果任何引發異常的導入器,您的類的行為與您期望的一樣。
如果列表為空,則測試應斷言行為。 (默認為True返回?)
如果一個或多個導入程序失敗,測試還應斷言您期望的行為。 (您是否正在為您的RunImporters結果輸入或輸入您的導入結果?)
該方法是否運行每個導入器,無論先前是否失敗,或者在第一次失敗時返回false?
如果它提供了一個空列表,那么你的構造函數或斷言也應該有一個測試。
您可以斷言已調用這些方法。 您可以參考這些問題來了解它是如何完成的:
您還可以斷言在DataImporter
類中沒有遇到異常。
如果您對所使用的接口具有絕對控制權,那么讓每個接口返回一個boolean
可能會有所幫助,該boolean
指示特定操作是否成功。
你的方法返回bool
,這就是你開始的地方,例如:
Run_ReturnsFalse_WhenThereIsNoImporters
Run_ReturnsFalse_WhenAtLeastOneImporterFails
true
)? 示例: Run_ReturnsTrue_WhenAllImportersSucceed
您設置模擬以模擬每個場景並再次測試。 如果沒有可觀察到的影響 (如返回值),則可以通過驗證對模擬對象進行調用來實現。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.