代码:
IFixture fixture = new Fixture().Customize(new AutoMoqCustomization());
fixture.Customize<ViewDataDictionary>(c => c.Without(x => x.ModelMetadata));
var target = fixture.CreateAnonymous<MyController>();
异常:
System.Reflection.TargetInvocationException: System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.NotImplementedException: The method or operation is not implemented.
MyController()
有 3 个参数。
我已经尝试了答案 here 中描述的修复但这是行不通的。
最佳答案
As it seems ,当使用 MVC 4 时,您必须以不同的方式自定义 Fixture
实例。
如果您替换,测试应该通过:
fixture.Customize<ViewDataDictionary>(c => c
.Without(x => x.ModelMetadata));
与:
fixture.Customize<ControllerContext>(c => c
.Without(x => x.DisplayMode));
您可以选择创建一个 composite所需的定制:
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));
}
}
}
然后,原始测试可以重写为:
[Fact]
public void Test()
{
var fixture = new Fixture()
.Customize(new WebModelCustomization());
var sut = fixture.CreateAnonymous<MyController>();
Assert.IsAssignableFrom<IController>(sut);
}
关于c# - AutoFixture 无法创建匿名 MVC Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14985930/