注意してください、私は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);
}