我正在尝试测试以下代码:
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()的文章,但不确定这是否适用于我自己的情况。
提前谢谢。
发布于 2014-02-17 19:47:29
供日后参考:
不幸的是,在构造函数拦截上安排返回值是不可能的
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[] { });https://stackoverflow.com/questions/21756885
复制相似问题