Гро*_*ный 9 .net c# unit-testing autofixture automoq
代码:
IFixture fixture = new Fixture().Customize(new AutoMoqCustomization());
fixture.Customize<ViewDataDictionary>(c => c.Without(x => x.ModelMetadata));
var target = fixture.CreateAnonymous<MyController>();
Run Code Online (Sandbox Code Playgroud)
例外:
System.Reflection.TargetInvocationException:System.Reflection.TargetInvocationException:调用目标已抛出异常.---> System.NotImplementedException:未实现方法或操作.
MyController() 需要3个参数.
我试着在答案中描述的修复在这里,但它是行不通的.
Nik*_*nis 23
看起来,在使用MVC 4时,您必须以Fixture不同的方式自定义实例.
如果您更换,测试应该通过:
fixture.Customize<ViewDataDictionary>(c => c
.Without(x => x.ModelMetadata));
Run Code Online (Sandbox Code Playgroud)
用:
fixture.Customize<ControllerContext>(c => c
.Without(x => x.DisplayMode));
Run Code Online (Sandbox Code Playgroud)
(可选)您可以创建所需自定义的组合:
internal class WebModelCustomization : CompositeCustomization
{
internal WebModelCustomization()
: base(
new MvcCustomization(),
new AutoMoqCustomization())
{
}
private class MvcCustomization : ICustomization
{
public void Customize(IFixture fixture)
{
fixture.Customize<ControllerContext>(c => c
.Without(x => x.DisplayMode));
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,原始测试可以重写为:
[Fact]
public void Test()
{
var fixture = new Fixture()
.Customize(new WebModelCustomization());
var sut = fixture.CreateAnonymous<MyController>();
Assert.IsAssignableFrom<IController>(sut);
}
Run Code Online (Sandbox Code Playgroud)