【发布时间】:2012-12-02 21:15:31
【问题描述】:
请注意,我对 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);
}
【问题讨论】:
-
AutoMoqCustomization可以提供抽象基类和接口。ADataFeed的构造函数是公开的吗?如果是这样,请使其受到保护。这是抽象类上的公共构造函数的设计错误 -
非常有趣。好的,起订量处理抽象类上的公共构造函数...... autofixture 没有。两者都不能与私有构造函数一起工作,并且在受保护时都可以工作。我会相信你的话,这是一个设计错误......另一天的另一个问题。在此期间,我将使用 protected。
-
这解决了您的问题吗?
-
重要的是你得到了你的问题的答案 :) 关于问题的第二部分,请不要创建抽象类,一切都会简单得多:) "Favor object组合优于类继承。”
标签: interface moq abstract xunit.net autofixture