2014-02-13 71 views
0

我在我的應用程序下面的代碼:爲什麼JustMock聲稱我的嘲弄方法永遠不會被調用?

public class DirectoryCrawler 
{ 
    private IPathWrap _path; 
    private IDirectoryWrap _directory; 
    private ITrackedFileStore _trackedFileStore; 
    private IFileWrap _file; 

    public DirectoryCrawler(IPathWrap path, ITrackedFileStore trackedFileStore, IDirectoryWrap directory, IFileWrap file) 
    { 
     _path = path; 
     _trackedFileStore = trackedFileStore; 
     _directory = directory; 
     _file = file; 
    } 

    public void CheckDirectoryContents(string baseDirectory) 
    { 
     var trackedFiles = _trackedFileStore.GetTrackedFilesInPath(baseDirectory); 
    } 
} 

我單位通過測試它:

[TestClass] 
public class DirectoryCrawlerTests 
{ 
    private MockingContainer<DirectoryCrawler> _mockContainer; 

    [TestInitialize] 
    public void Setup() 
    { 
     _mockContainer = new MockingContainer<DirectoryCrawler>(); 
    } 

    [TestMethod] 
    public void Requests_Tracked_Files_In_Path() 
    { 
     var instance = _mockContainer.Instance; 
     instance.CheckDirectoryContents("C:\\Test"); 

     _mockContainer.Assert<ITrackedFileStore>(x => x.GetTrackedFilesInPath(Arg.IsAny<string>()), Occurs.Once()); 
    } 
} 

但是,斷言失敗自稱Result Message: Occurrence expectation failed. Expected exactly 1 call. Calls so far: 0

爲什麼JustMock未檢測發生是否正確?這是最新的JustMock Lite Nuget包(2014.1.1317.4)

+0

我假設'_trackedFileStore'是一個注入的依賴項?我們可以看到你的'_mockContainer'設置嗎? –

+0

對不起,我添加了完整的測試類和實現類。 – KallDrexx

+0

你永遠不會把'ITrackedFileStore'的模擬傳遞給'DirectoryCrawler'模擬。因此,模擬不能驗證它是否被調用。這也可能與你嘲笑一個具體對象有關,我們通常不這樣做(我也更熟悉Moq)。 –

回答

0

正如評論中所述,使用AutoMocking時,呼叫驗證會有所不同。

您必須Arrange將被調用的automocked依賴關係方法並將其指定爲MustBeCalled()

相關問題