【问题标题】:Abstract test classes with xUnit.net and ReSharper test runner使用 xUnit.net 和 ReSharper 测试运行器的抽象测试类
【发布时间】: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 questionanother 这可能会有所帮助 - 第一步是看看你是否可以在 R# 和/或 VS 中使用新的解决方案创建一个新的测试项目,以尝试缩小范围。 (如果不使用最新的 xunit,可能值得一提,如果不引用 xunit.runner.visualstudio,vs runner 也不应该工作)

标签: c# unit-testing resharper abstract-class xunit.net


【解决方案1】:

您可以查看this。我也遇到了没有找到我的测试的文本资源管理器的问题,当我删除一个临时的visualstudioextension目录时,我设法解决了这个问题,你可以在路径中找到 - C:/users/USERNAME/AppData/Local/Temp/VisualStudioTestExplorerExtensions

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    • 2011-02-12
    • 2016-07-27
    • 1970-01-01
    • 2010-09-16
    • 2010-12-01
    相关资源
    最近更新 更多