当我需要模拟一些像这样的类时:

public class Dummy
{
  private readonly int _someInt;
  private readonly int _someOtherInt;
  private readonly IFoo _foo;

    public Dummy(int someInt,int someOtherInt, IFoo foo)
    {
      _someInt = someInt;
      _someOtherInt = someOtherInt;
      _foo = foo;
    }
}


我用Moq做这样的事情:

[Test]
public void ShouldCreateADummyInstance()
{
      var someInt = 1;
      var someOtherInt = 2;

      var mockFoo = new Mock<IFoo>();

      var dummy = new Dummy(someInt, someOtherInt, mockFoo.Object);

      //And so on...
}


但是,当我使用AutoMoq时,无法为构造函数中的每个依赖项(我的意思是someInt和someOtherInt)指定不同的int,因为AutoMoqer.SetInstace(instanceIWantToUse)每次都必须设置提供相同依赖关系的指定实例。

您知道如何为someInt和someOtherInt指定不同的int以便在测试中继续使用AutoMoqer吗?

谢谢,希望您能帮助我!

最佳答案

全面披露:我从未使用过AutoMoq(尽管我只是在GitHub上注册了以跟随它,因为它看起来很吸引人,而且我喜欢简化的东西)。

就是说,看起来AutoMoq工具是为与您的用例不同而设计的。看来,如果添加了另一个构造函数注入的依赖项,他似乎可以用它来“防止损坏的单元测试的未来”,并能够生成一个带有依赖项的默认对象,以免出现空引用异常。

在阅读AutoMoq项目页面后,我想如果Darren在编写您的特定单元测试,他可能会直接使用Moq。也就是说,对于该特定测试,您可能应该使用已发布的测试。当您不想在测试中指定所有依赖项时,AutoMoq似乎旨在提供合理的默认行为。但是在您的情况下,您确实想指定那些特定的依赖项。

仅仅因为您对特定测试使用常规Moq并不意味着您不能对其他测试使用AutoMoq。其余测试(两个int均为零或其他值)将经过验证,但如果在Dummy类中添加另一个构造函数参数,则可能只需要忍受一次中断。

(您也可以随时获取AutoMoq的源代码并根据需要进行修改)。

关于c# - AutoMoqer:将参数传递给构造函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8406589/

10-15 03:35