繁体   English   中英

如何在模拟上设置方法以默认返回 null?

[英]How do I set up methods on mocks to return null by default?

我正在使用 AutoFixture 和 AutoMoq 在这样的单元测试中模拟我的依赖项

public class MyObject
{
   public string Value { get; set; }
}

public interface IMyService
{
   MyObject GetMyObject();
}

public class Tests
{
   [Fact]
   public void MyTest()
   {
      var fixture = new Fixture().Customize(new AutoMoqCustomization());
      var myService = fixture.Create<Mock<IMyService>>();

      // I want myObject to be null, but I'm getting a Mock<MyObject> instead
      var myObject = myService.Object.GetMyObject();    ​
   ​}
}

我想要行var myObject = myService.Object.GetMyObject(); 返回null ,而是返回一个Mock<MyObject>值。 我知道我可以做myService.Setup(e => e.GetMyObject()).Returns((MyObject)null); 明确告诉它返回 null,但是我在整个测试过程中调用了许多类似的方法,我希望它们默认返回 null,而无需我在它们上显式调用Setup

有没有办法设置夹具以使模拟上的所有方法默认返回null

评论中的建议很接近。 缺少的部分是将 AutoMoqCustomization 上的CofnigureMembers属性AutoMoqCustomizationtrue ,以便 AutoFixture 可以解析成员的实例。

[Fact]
public void MyTest()
{
    var fixture = new Fixture().Customize(new AutoMoqCustomization
    {
        ConfigureMembers = true,
    });
    fixture.Inject<MyObject>(null));
    var myService = fixture.Create<Mock<IMyService>>();

    var myObject = myService.Object.GetMyObject();
    
    Assert.Null(myObject);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM