3

次のコードを宣言的な方法で表現するのに問題があります。

[Theory]
[InlineData(@"-o=C:\Temp\someFile -p=1")]
[InlineData(@"-p=1 -o=C:\Temp\someFile")]
public void ParseMissingParameterShouldReturnCorrectResult(
    string argsString
)
{
    .....
    var fixture = new Fixture();
    fixture.Register<IFoo>(fixture.Create<Foo>);
    fixture.Register<IBar>(fixture.Create<Bar>);

    var sut = fixture.Create<SomeClass>();
    .....
}

私の生産コードでは、次のようなものがあります。

new SomeClass(new Foo(new Bar))

SomeClass のコンストラクターは次のように定義されています。

public SomeClass(IFoo foo)

ティア、

デビッド

編集:

一部のクラスは次のようになります

public class SomeClass : IQux
{
    private readonly IFoo _foo;

    public SomeClass(IFoo foo)
    {       
        _foo= foo;
    }
4

1 に答える 1

4

SUT (SomeClass型) をテスト メソッドのパラメーターとして宣言できます。

[Theory]
[InlineAutoMockData(@"-o=C:\Temp\someFile -p=1")]
[InlineAutoMockData(@"-p=1 -o=C:\Temp\someFile")]
public void ParseMissingParameterShouldReturnCorrectResult(
    string argsString,
    SomeClass sut)
{
}

[InlineAutoMockData]属性を作成する簡単な方法は次のとおりです。

internal class InlineAutoMockDataAttribute : CompositeDataAttribute
{
    internal InlineAutoMockDataAttribute (params object[] values)
        : base(
            new InlineDataAttribute(values),
            new AutoDataAttribute(
                new Fixture().Customize(
                    new CompositeCustomization(
                        new AutoMoqCustomization()))))
    {
    }
}

:

IFooまたはIBarモックされたインスタンスに期待を設定する必要がある場合は、同じインスタンスがインスタンスに渡されるようにそれらをフリーズできます。FrozenSomeClass

[Theory]
[InlineAutoMockData(@"-o=C:\Temp\someFile -p=1")]
[InlineAutoMockData(@"-p=1 -o=C:\Temp\someFile")]
public void ParseMissingParameterShouldReturnCorrectResult2(
    string argsString,
    [Frozen]Mock<IFoo> mock,
    [Frozen]Mock<IBar> stub,
    SomeClass sut)
{
}
于 2013-04-22T11:22:30.963 に答える