如何在默认情况下将 mocks 上的方法设置为 return 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(); 行到 return null,但它 return 是一个 Mock<MyObject> 值。我知道我可以 myService.Setup(e => e.GetMyObject()).Returns((MyObject)null); 明确地告诉它 return null,但是我有很多类似的方法在我的测试中被调用,我希望它们默认为 return null,无需我对它们显式调用 Setup

有没有办法将 fixture 设置为在默认情况下在 mock return null 上拥有所有方法?

评论中的建议很接近。缺少的部分是将 AutoMoqCustomization 上的 CofnigureMembers 属性 设置为 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);
}