首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用JustMock模拟构造函数?

如何用JustMock模拟构造函数?
EN

Stack Overflow用户
提问于 2014-02-13 14:23:51
回答 1查看 2.3K关注 0票数 6

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

代码语言:javascript
复制
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
    }
}

我希望这样做是可行的:

代码语言:javascript
复制
// 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()的文章,但不确定这是否适用于我自己的情况。

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-17 19:47:29

供日后参考:

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

代码语言:javascript
复制
JustMock.Mock.Arrange(() => new DirectoryInfo(@"testRoot\DrivesData\TestFamily")).Returns(fakeDirectoryInfo);)

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

代码语言:javascript
复制
Mock.Arrange(() => new DirectoryInfo(passedString)).DoNothing();

在安排调用时,使用.IgnoreInstance()方法。这应该会导致这样的调用:

代码语言:javascript
复制
Mock.Arrange(() => fakeDirectoryInfo.EnumerateDirectories()).IgnoreInstance().Returns(new DirectoryInfo[] { });
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21756885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档