当我直接使用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