C# 使用nunit、xunit或visual studio测试拆分测试定义和测试实现

C# 使用nunit、xunit或visual studio测试拆分测试定义和测试实现,c#,visual-studio,unit-testing,testing,nunit,C#,Visual Studio,Unit Testing,Testing,Nunit,我想将测试的定义与其实现分开,如下所示: 我希望对场景有一个抽象的定义,并以不同的方式实现它,以便比较它们。TestRunner必须捕获继承类中的所有测试,即使基类中定义了这些测试。有没有办法做到这一点 致以最良好的祝愿, zimmy有了xunit,您可以愉快地做到:- public abstract class ContainerTests { [Fact] public abstract void BuildContainer(); }

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

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

致以最良好的祝愿,
zimmy

有了xunit,您可以愉快地做到:-

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

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

    }

如果可以用NUnit编写您给出的代码,这将意味着派生类的每个开发人员都必须进行名为BuildContainer的测试。这个测试可以测试任何东西,甚至是空的。因此,如果您的意图是强制开发人员实现一个测试特定事物的测试,那么这将无法完成任务

但是,您可以通过调用派生类必须实现的特定抽象方法在基类中实现测试。通常,您希望这些方法能够在基类中进行断言,而不是让它们自己执行所需的断言


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

您可以使用接口IContainerTests强制实现TestsHanks来获得答案。我忘记了一个重要的约束,即TestRunner必须捕获继承类中的所有测试,如果定义在基类中。我尝试了NUnit,但无法在接口中定义[TestFixture]。
 public abstract class ContainerTests
    {
        [Fact]
        public abstract void BuildContainer();
    }

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

    }