0

我正在使用 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有没有办法将夹具设置为默认情况下模拟返回的所有方法?

4

1 回答 1

2

评论中的建议很接近。缺少的部分是将CofnigureMembers属性设置AutoMoqCustomization为,true以便 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);
}
于 2021-05-08T20:51:34.933 回答