【问题标题】:split test definition and test implementation with nunit, xunit or visual studio test使用 nunit、xunit 或 Visual Studio 测试拆分测试定义和测试实现
【发布时间】:2018-04-23 06:07:37
【问题描述】:

我想将测试的定义和它的实现分开,如下所示:

[TestFixture]
public abstract class ContainerTests
{
    [Test]
    public abstract void BuildContainer();
}

public class UnityTest : ContainerTests
{
    public override BuildContainer()
    {
       // Implementation
    }
}

我想要一个抽象的场景定义并以不同的方式实现它,以便我可以比较它们。即使在基类中定义了,TestRunner 也必须从继承的类中捕获所有测试。有没有办法做到这一点?

最好的问候, 齐米

【问题讨论】:

  • 你可以只使用接口 IContainerTests 来强制执行测试
  • 感谢您的回答。我忘记了 TestRunner 必须捕获继承类中的所有测试的重要约束,事件定义在基类中。我尝试了 NUnit,但无法在接口中定义 [TestFixture]。

标签: c# visual-studio unit-testing testing nunit


【解决方案1】:

使用 xunit,您可以愉快地做 :-

 public abstract class ContainerTests
    {
        [Fact]
        public abstract void BuildContainer();
    }

    public class UnityContainer : ContainerTests
    {
        public override void BuildContainer()
        {
            Assert.Equal(1,2);
        }

    }

【讨论】:

    【解决方案2】:

    如果可以编写您在 NUnit 中提供的代码,则意味着派生类的每个开发人员都必须进行名为 BuildContainer 的测试。该测试可以测试任何东西,甚至只是空的。因此,如果您的意图是强制开发人员实施测试特定内容的测试,那么这将无法完成。

    但是,您可以做的是使用对派生类必须实现的特定抽象方法的调用在基类中实现测试。一般来说,您会希望这些方法做一些您可以在基类中断言的事情,而不是让它们自己执行所需的断言。

    一般来说,NUnit 中缺乏覆盖测试方法的能力是由于作者认为在大多数情况下这不是一个好主意。不过,我很想听听一个反例。

    【讨论】:

      猜你喜欢
      • 2018-09-23
      • 1970-01-01
      • 1970-01-01
      • 2012-11-19
      • 2010-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多