6

注意してください、私はTDDに少し慣れていないので、一般的なアドバイスと具体的な回答を取ります。

抽象クラスもインターフェースもインスタンス化できません。明らかに、Moqは2番目のテストでADataFeedのモックアップインスタンスを提供できます。AutoMoqCustomizationがインターフェイスに対して機能するIDataFeedのに、抽象クラスに対しては機能せずADataFeed、代わりにInvalidOperationExceptionをスローするのはなぜですか?

次に、AutoFixtureアプローチ(または一般的にTDD)は、この場合の接続文字列などの特定の値を要求および保証するコンストラクターを備えた抽象クラスを必要とする可能性のある設計を駆動することでしょうか?

[Theory, AutoMoqData]
public void AllDataFeedsHaveAConectionString(
    IDataFeed sut)
{
    var result = sut.GetConnectionString();
    Assert.Null(result);
}

[Fact]
public void AllDataFeedsRequireAConnectionString()
{
    var expected = Guid.NewGuid().ToString();
    var sut = new Mock<ADataFeed>(expected);
    var result = sut.Object.GetConnectionString();
    Assert.Equal(expected, result);
}

[Theory, AutoMoqData]
public void AllDataFeedsRequireAConnectionString2(
    [Frozen] string expected, 
    ADataFeed sut)
{
    var result = sut.GetConnectionString();
    Assert.Equal(expected, result);
}
4

1 に答える 1

1

コンストラクターを持つ抽象クラスは、保護されているとマークする必要があります。AutoFixtureは、コンストラクターがpublicとマークされている場合、これは設計エラーであるため、抽象クラスに対してプログラムしません。

于 2013-08-19T14:15:08.100 に答える