簡體   English   中英

我應該單獨測試代碼沒有明顯的方法返回嗎?

[英]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.

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