我有以下的單元測試:爲什麼moq聲稱我的模擬的屬性setter永遠不會被調用,即使代碼調用它?
[TestClass]
public class DirectoryWatcherTests
{
private AutoMoqer _mocker;
private DirectoryWatcher _instance;
[TestInitialize]
public void Setup()
{
_mocker = new AutoMoqer();
_instance = _mocker.Create<DirectoryWatcher>();
}
[TestMethod]
public void Watcher_Gets_Path_Set_Same_As_Begin_Path_Parameter()
{
const string path = @"C:\test";
_instance.Begin(path);
_mocker.GetMock<FileSystemWatcherBase>()
.VerifySet(x => x.Path = path);
}
}
代碼中,我寫了得到這個傳球是:
public class DirectoryWatcher
{
private readonly FileSystemWatcherBase _fileSystemWatcher;
public DirectoryWatcher(FileSystemWatcherBase fileSystemWatcher)
{
_fileSystemWatcher = fileSystemWatcher;
}
public void Begin(string path)
{
if (string.IsNullOrWhiteSpace(path))
throw new ArgumentException("FileSystemWatcher passed in without a valid path already set");
_fileSystemWatcher.Path = path;
}
}
然而,VerifySet
失敗:在
預計調用模擬至少一次,但從未執行:x => x.Path =「C:\ test」
它爲什麼聲稱setter永遠不會被調用?如果它有幫助FileSystemWatcherBase
是一個抽象類。
在我的結尾工作。你可以顯示FileSystemWatcherBase的代碼嗎? – LostInComputer
這很奇怪。 FileSystemWatcherBase的代碼位於https://github.com/tathamoddie/System.IO.Abstractions/blob/master/System.IO.Abstractions/FileSystemWatcherBase.cs – KallDrexx
是的。仍然有效。這裏是我的源代碼:https://dl.dropboxusercontent.com/u/14576915/MoqTest.zip – LostInComputer