如何在默认情况下将 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);
}
我在这样的单元测试中使用 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);
}