6

请注意,我对 TDD 有点陌生,所以我会接受一般建议和具体答案。

抽象类和接口都不能被实例化。显然,Moq 可以在第二个测试中给我一个模拟的 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 不会针对抽象类进行编程,因为这是一个设计错误。

于 2013-08-19T14:15:08.100 回答