6

我正在尝试测试以下代码:

public ICollection<RawCatalog> ReadCatalog(string familyName)
{
    // Root folder for the family
    string familyFolder = this.GetFamilyFolder(familyName);
    DirectoryInfo familyFolderInfo = new DirectoryInfo(familyFolder);

    foreach (DirectoryInfo subFamilyFolderInfo in familyFolderInfo.EnumerateDirectories())
    {
        // Do stuff
    }
}

我希望这会起作用:

// Arrange
DirectoryInfo fakeDirectoryInfo = Mock.Create<DirectoryInfo>(Constructor.Mocked);
Mock.Arrange(() => new DirectoryInfo(@"testRoot\DrivesData\TestFamily")).Returns(fakeDirectoryInfo);
Mock.Arrange(() => directoryInfo.EnumerateDirectories()).Returns(new DirectoryInfo[] { });

但是似乎没有在构造函数中返回 fakeDirectoryInfo 。我应该怎么做测试?(如果可能的话,我不应该更改源代码,因为它是工作代码)。

我读过一些关于未来模拟和使用 DoNothing() 但不确定这是否适用于我自己的情况。

提前致谢。

4

1 回答 1

6

备查:

不幸的是,在构造函数拦截上安排返回值是不可能的

JustMock.Mock.Arrange(() => new DirectoryInfo(@"testRoot\DrivesData\TestFamily")).Returns(fakeDirectoryInfo);)

如果您不需要区分实例,则可以使用以下内容:

Mock.Arrange(() => new DirectoryInfo(passedString)).DoNothing();

并在安排调用上使用该.IgnoreInstance()方法。这应该会导致如下调用:

Mock.Arrange(() => fakeDirectoryInfo.EnumerateDirectories()).IgnoreInstance().Returns(new DirectoryInfo[] { });
于 2014-02-17T19:47:29.743 回答