9

コード:

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:呼び出しのターゲットによって例外がスローされました。---> System.NotImplementedException:メソッドまたは操作が実装されていません。

MyController()3つのパラメータを取ります。

ここの回答に記載されている修正を試しましたが、機能しません。

4

1 に答える 1

25

どうやらFixture、MVC 4を使用する場合は、インスタンスを別の方法でカスタマイズする必要があります。

交換すると、テストに合格するはずです。

fixture.Customize<ViewDataDictionary>(c => c
    .Without(x => x.ModelMetadata));

fixture.Customize<ControllerContext>(c => c
    .Without(x => x.DisplayMode));

オプションで、必要なカスタマイズの複合を作成できます。

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);
}
于 2013-02-20T21:03:58.140 に答える