簡體   English   中英

在單元測試案例中,從物理路徑讀取csv文件是否有效? 為什么?

[英]Is reading csv file from physical path is valid scenario in unit test case ? why?

string _inboundFilePath = AppDomain.CurrentDomain.BaseDirectory + @"\Inbound\CompareDataFile.csv";

var mockReaderStream = new Mock<IReaderStream>();
mockReaderStream.Setup(x => x.CreateStream())
    .Returns(new System.IO.StreamReader(_inboundFilePath));

在這里,我依賴於入站文件來讀取數據,然后執行其他功能檢查。 我的問題是如何避免這種情況? 在這種情況下,我正在檢查數據以獲取來自csv的特定ID。

因為單元測試必須是確定性的,所以這不太可能是一個好習慣。 這意味着無論情況如何,您都必須確保如果運行此測試,它將執行與以前完全相同的操作。

如果您讀取一個csv文件,則測試將取決於外部環境。 不幸的是,外部世界是不穩定的。 首先,可以更改csv文件。

這就是為什么更好的做法是從程序集中的嵌入式資源獲取csv文件流,而不是從硬盤驅動器上的文件獲取csv文件流。

除了斯蒂芬的答案。 我會建議你:

  1. 將@“ \\ Inbound \\ CompareDataFile.csv”放入配置文件。

  2. 在上述類中創建公共屬性或單獨的方法,這些方法將能夠檢索並返回入站文件的絕對路徑(稱為GetPath )。

  3. 創建有權訪問配置文件的UnitTest方法。 此TestMethod必須讀取配置文件,並調用AppDomain.CurrentDomain.BaseDirectory 因此,此方法還可以檢索入站文件的絕對路徑,並在此調用之后獲取GetPath()

  4. 創建抽象(Mock上方的接口或抽象類-(在您提供的代碼中它不是模擬的,因此很難猜測為什么如此稱呼))。

  5. 在上述類中創建需要抽象對象的公共方法,並調用其方法ReadFromCsv()

  6. 創建將實現此抽象的Test類(模擬),並在調用其方法ReadFromCsv()時返回所需/不想要的值。

  7. 最后,測試您的課程。

PS。 這不是測試類的嚴格算法,可以使用它。 您希望從所有這七個項目中得到的是單元測試相似性的概念。

同樣,您也不會從配置文件中釋放類,因此,請使用這種方法從配置中釋放類: 如何使用moq模擬ConfigurationManager.AppSettings

暫無
暫無

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

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