如何从另一个程序集“导入”NUnit测试

时间:2015-03-26 16:31:37

标签: c# nunit resharper

我的项目中有几个程序集,每个程序集都有一个覆盖它的测试程序集(这不能改变,所以不建议)

我有一套通用的测试,我希望将它们包含在每个测试程序集的测试套件中。

我已将这些常见测试放在他们自己的程序集中,并从每个具体的测试程序集中引用它,但是NUnit / ReSharper测试运行程序不会选择测试。

如何让NUnit和ReSharper测试运行器为每个测试程序集包含/找到这些常用测试并执行它们?

更新:目前,我的常见和每个项目测试都是使用[TestFixture][Test]属性定义的

实施例

来自普通程序集的示例测试

namespace Example.Common {
    [Test]
    public void CommonTest() {
        // something that applys to all assemblies, like code analysis, obviously this is a silly example, but the contents of the test is not important. I just want this included with the other tests in the specific assemblies
        Assert.AreEqual(10, Assembly.GetExecutingAssembly().DefinedTypes.Count());
    }
}

来自项目特定程序集的示例测试:

namespace Example.Specific {
    [Test]
    public void SpecificTest() {
        // something specific to this assembly
        Assert.AreEqual("Example.Specific", Assembly.GetExecutingAssembly().GetName().Name);
    }
}

我希望将常用测试包含在

2 个答案:

答案 0 :(得分:2)

您需要拥有CommonTest类的派生类。仅引用通用测试组件是不够的。今年早些时候我遇到了同样的问题;我想执行几个测试,但配置不同(app.config)。最后这是同样的问题,但不幸的是,没有像[assembly: IncludeTest( typeof(CommonTest))]这样的简单方法..那将是非常棒的:)

答案 1 :(得分:0)

我不确定我是否理解正确,但这就是我要做的事情:

  • 拥有一个包含所有常见测试类的库,如:
namespace NUnitCommon
{
    [TestFixture]
    public class NUnitCommonTestClass
    {
        [Test]
        public void CommonTestNoOne()
        {
            Assert.IsTrue(true);
        }
    }
}
  • 然后,您应该在每个“特定”测试项目中包含对此库的引用,并让所有测试类继承它:
using NUnitCommon;

namespace NUnitSpecific
{
    [TestFixture]
    public class SpecificTestClass : NUnitCommonTestClass
    {
        [Test]
        public void SpecificTestNoOne()
        {
            Assert.IsTrue(true);
        }
    }
}

如果您要为SpecificTestClass运行所有测试,那么也会运行来自NUnitCommonTestClass的测试。使用ReSharper测试。那是你要的吗?如果没有,请澄清。