c# - AutoFixture 无法创建匿名 MVC Controller

标签 c# .net 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>();

异常:

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/

相关文章:

c# - 如何通过 Linq-to-XML 使用数据更新现有实体?

c# - 为整个项目全局命名空间别名

c# - 如何从 X509Store 加载受密码保护的证书?

python - 进行单元测试时未定义名称 'self'?

c++ - 在单元测试中,如何在不使用运算符== 的情况下比较两个对象,这可能会错过新成员?

php - 有没有办法初始化 PHPUnit 测试类模板?

c# - NLog 不从引用的 dll 写入

c# - 使用 iTextSharp 进行 PDF 压缩

javascript - 在 JavaScript Asp.net 中迭代 JSON

c# - 无法在 C# 应用程序中为我的线程使用多个处理器组