c# - 如何使用 JustMock 模拟构造函数?

标签 c# unit-testing justmock

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

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。我应该如何进行测试? (如果可能的话,我不应该更改源代码,因为它是工作代码)。

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

提前致谢。

最佳答案

供将来引用:

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

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[] { });

关于c# - 如何使用 JustMock 模拟构造函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21756885/

相关文章:

c# - 是否可以在没有 "APIPassword"的情况下使用 PayPal API 接受付款

c# - 无法弄清楚这个 jQuery 代码是如何工作的

java - 获取 junit.framework.AssertionFailedError : No tests found in [package] when using Unit and Mockito

java - 如何在任何类中的任何测试之前和之后运行一组代码?

c# - 无法使用 JustMock 模拟简单对象数组

mocking - TypeMock VS JustMock(VS RhinoMock,起订量...): current situation in 2011?

c# - 在 ASP.NET MVC 中模拟一个简单的服务总线

c# - C# 中的 MySQL : how do I enable the traffic compression?

c++ - 如何在 cppunit 中断言语句抛出 Excp1 或 Excp2 类型的异常?

c# - 如何将字符串 c# 方程转换为答案