0

我正在使用C#中的Visual Studio(Community 2015)項目來讀取視頻文件中的元數據。因此我想編寫一個單元測試,測試程序是否以正確的方式處理不可訪問的文件。所以我想添加一個測試文件到單元測試沒有讀取權限的測試數據。Visual Studio:撤消單元測試的測試文件的讀取權限

但是,這樣做的最好方法是什麼?我沒有在Visual Studio中找到任何設置權限的選項。我目前唯一的想法是直接撤消文件屬性中的讀取權限。通過Windows文件資源管理器,因此在Visual Studio之外。但後來我無法自己讀取文件。此外,它似乎不是正確的方式,我認爲應該有一個更簡潔的方式直接在Visual Studio中解決這個問題。

任何想法?

回答

1

如果您正在編寫單元測試,那麼它應該檢查您的代碼是否正確編寫,而不是檢查難以複製或可能無法在其他機器上使用的外部問題。所以我認爲你應該閱讀關於依賴注入以及如何在你的測試中做模擬依賴。我可以給你一個容易理解的例子,但請用你的話寫下來。

public interface IFileReader 
{ 
    string ReadFile(string filePath); 
} 


public class FileReader : IFileReader 
{ 
    public string ReadFile(string filePath) 
    { 
     return System.IO.File.ReadAllText(filePath); 
    } 
} 

所以假設你有一個類VideoMetaDataReader然後在類,你會注入接口的依賴和使用ReadFile的方法來讀取。然後在您的測試

[TestFixture] 
    public class FileReaderTests 
    { 
     [Test] 
     public void ShouldDisplayANiceMessage_WhenFileIsInaccessible() 
     { 
      var moq = new Moq.Mock<IFileReader>(); 
      moq 
       .Setup(x => x.ReadFile(Moq.It.IsAny<string>())) 
       .Throws<Exception>(); 

      var metaDataReader = new MetaDataReader(moq.Object); 
      metaDataReader.ReadVideoFile("video.mp4"); 
      Assert.AreEqual(1, meaDataReader.Errors.Count);  
     } 
    } 

我猜想會有這將返回錯誤時遇到一個錯誤的屬性,但它取決於你怎麼想這樣做(我沒有想到在這個太多了)。

無論如何,關鍵是不要測試你的代碼沒有涵蓋什麼。你的代碼需要做的是在出現異常時顯示一條好消息,並且如果你嘲笑接口(這意味着不要調用實際的實現,而是在這個測試中做一些我想做的事),然後執行檢查你的代碼是否可以處理。順便說一句,我用nunit和moq進行測試和嘲笑。

+0

謝謝!這似乎是我正在尋找的。我會嘗試 –