c# - AutoMoqer : Passing parameters into constructors

标签 c# unit-testing c#-4.0 mocking moq

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

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 工具似乎是为与您不同的用例而设计的。如果添加另一个构造函数注入(inject)的依赖项,他似乎将它用于“ future 证明”以防止损坏的单元测试,并且能够生成一个默认对象,其中包含用于依赖项的内容,大概是为了避免空引用异常。

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

仅仅因为您对该特定测试使用常规 Moq,并不意味着您不能将 AutoMoq 用于其他测试。其余测试(其中两个 int 均为零或其他)将面向 future ,但如果您将另一个构造函数参数添加到 Dummy 类,您可能只需要忍受那个中断。

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

关于c# - AutoMoqer : Passing parameters into constructors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8406589/

相关文章:

c# - EWS 附加电子邮件在 .Load() 之后缺少 DatatimeReceived 属性

unit-testing - 模拟 Grails 单元测试的方法

python - 几个模块的 Pytest init 设置

php - magento paypal 收到错误 :We're sorry, PayPal 不允许美国居民将购买的商品运送到英国

c# - 如何安全地将 long 缩小为 int?

c#-4.0 - MongoDb 中的继承 : how to request instances of defined type

c# winforms 如何获取 MessageBoxButtons.YesNo 不禁用 (red)exit x

c# - 不同年份格式的正则表达式 c#

c# - 使用 PrintDocument 打印多页

c# - C# 中的抽象类