AutoMoqCustomization是否适用于抽象类?

时间:2012-12-14 20:43:39

标签: interface moq abstract xunit.net autofixture

请注意,我对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);
}

1 个答案:

答案 0 :(得分:1)

具有构造函数的抽象类必须标记为受保护。当构造函数标记为public时,AutoFixture将不会对抽象类进行编程,因为这是一个设计错误。