当我直接使用Moq来模拟IBuilderFactory并BuilderService在单元测试中实例化自己时,我可以通过测试来验证Create()方法是否只IBuilderFactory被调用一次.
但是,当我使用Autofixture与AutoMoqCustomization,冻结模拟IBuilderFactory和实例化BuilderService时fixture.Create<BuilderService>,我得到以下异常:
System.ArgumentException:无法实例化类的代理:OddBehaviorTests.CubeBuilder.找不到无参数构造函数.参数名称:constructorArguments
如果我进行CubeBuilder密封(通过使用SealedCubeBuilder被调用的密封类替换它来表示IBuilderFactoryForSealedBuilder.Create(),测试使用AutoFixture和AutoMoqCustomization进行传递,没有异常抛出.
我错过了什么吗?由于我直接使用Moq进行测试,我相信这与Autofixture和/或AutoMoqCustomization有关.这是理想的行为吗?如果是这样,为什么?
要重现,我正在使用:
using Moq;
using Ploeh.AutoFixture;
using Ploeh.AutoFixture.AutoMoq;
using Xunit;
Run Code Online (Sandbox Code Playgroud)
以下是说明行为的四个测试:
public class BuilderServiceTests {
[Fact]
public void CubeBuilderFactoryCreateMethodShouldBeCalled_UsingMoq() {
var factory = new Mock<IBuilderFactory>();
var sut = new BuilderService(factory.Object);
sut.Create();
factory.Verify(f => f.Create(), Times.Once());
}
[Fact]
public void CubeBuilderFactoryCreateMethodShouldBeCalled_UsingAutoFixture() {
var fixture = new Fixture().Customize(new AutoMoqCustomization());
var factory = …Run Code Online (Sandbox Code Playgroud) dependency-injection castle-dynamicproxy moq autofixture automocking