加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – AutoMoqer:将参数传递给构造函数

发布时间:2020-12-15 17:22:22 所属栏目:百科 来源:网络整理
导读:当我需要模拟一些类似这样的类: 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 = som
当我需要模拟一些类似这样的类:

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用于其他测试.其余的测试(其中两个整数都是零或其他)将是面向未来的,但是如果你在Dummy类中添加另一个构造函数参数,你可能只需要使用那个.

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读