【发布时间】:2017-12-12 07:32:17
【问题描述】:
我想通过使用多态获取具体实例的抽象工厂方法 (using this approach) 创建抽象测试类来对抽象类进行单元测试。像这样的:
public abstract class Base
{
public bool MyMethod()
{
return true;
}
}
public class Derived : Base {}
// Tests
public abstract class BaseTest
{
[Fact]
public void MyMethod_MakeTestFailByAssertingFalseReturn()
{
//Arrange
var instance = GetConcreteInstance();
//Act
bool result = instance.MyMethod();
//Assert
Assert.False(result);
}
protected abstract Base GetConcreteInstance();
}
public class DerivedTest : BaseTest
{
protected override Base GetConcreteInstance()
{
return new Derived();
}
}
到目前为止,一切都很好。但是 ReSharper 测试运行器给出了这个错误:
不确定:测试未运行
用于 BaseTest 类中的所有测试。甚至那些被忽略的。我尝试使用 Visual Studio 测试运行程序运行测试,但它没有检测到任何测试。
【问题讨论】:
-
您是否将
TestAttribute添加到您的测试方法以及TestFixtureAttribute到您的班级?请注意,这些不会继承到您的DerivedTest-class。 -
是的,我的测试方法有
[Fact]属性。 xUnit 不需要TestFixtureAttribute,正如我在他们的网站上所说的那样:xUnit.net 不需要测试类的属性;它在程序集中的所有公共(导出)类中查找所有测试方法。(xunit.github.io/docs/comparisons.html) -
让你的样本真正准确——即不要谈论
[Fact],把它放进去! -
代码看起来正确,应该使它成为一个发现问题 - 我有一个 checklist self-answer question 和 another 这可能会有所帮助 - 第一步是看看你是否可以在 R# 和/或 VS 中使用新的解决方案创建一个新的测试项目,以尝试缩小范围。 (如果不使用最新的 xunit,可能值得一提,如果不引用
xunit.runner.visualstudio,vs runner 也不应该工作)
标签: c# unit-testing resharper abstract-class xunit.net