C# 如何";进口;NUnit从另一个程序集进行测试

C# 如何";进口;NUnit从另一个程序集进行测试,c#,nunit,resharper,C#,Nunit,Resharper,我的项目中有几个程序集,每个程序集都包含一个测试程序集(这无法更改,因此不建议更改) 我有一个通用的测试套件,我希望将其包含在每个测试组件的测试套件中 我已经将这些常见的测试放在它们自己的组件中,并从每个具体的测试组件中引用了这些测试,但是NUnit/ReSharper测试运行人员不会选择这些测试 如何使NUnit和ReSharper测试运行程序包含/查找每个测试程序集的这些公共测试,并执行它们 更新:目前,我的通用测试和每个项目测试都是用[TestFixture]和[Test]属性简单定义的

我的项目中有几个程序集,每个程序集都包含一个测试程序集(这无法更改,因此不建议更改)

我有一个通用的测试套件,我希望将其包含在每个测试组件的测试套件中

我已经将这些常见的测试放在它们自己的组件中,并从每个具体的测试组件中引用了这些测试,但是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);
    }
}

我希望通用测试包含在

中。我不确定我是否正确理解您的意思,但我会这样做:

  • 有一个库,其中将包含包含所有常见测试的类,例如:
namespace-NUnitCommon
{
[测试夹具]
公共类NUnitCommonTestClass
{
[测试]
public void CommonTestNoOne()
{
Assert.IsTrue(真);
}
}
}
  • 然后,您应该在每个“特定”测试项目中包含对此库的引用,并让所有测试类从中继承:
使用NUnitCommon;
名称空间NUnitSpecific
{
[测试夹具]
公共类SpecificTestClass:NUnitCommonTestClass
{
[测试]
公共void SpecificTestNoOne()
{
Assert.IsTrue(真);
}
}
}

这样,如果您将运行
specificttestclass
的所有测试,那么也将运行
NUnitCommonTestClass
中的测试。使用ReSharper进行测试。这就是你想要的吗?如果没有,请澄清。

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

如果你能给出一个简短但完整的例子,说明你在做什么,那么帮助会容易得多。(例如,您是否正在使用?@jonSkeet我没有,尽管这似乎需要手动注册,但我宁愿避免。我意识到我可以反思,然后从套房继承遗产,但这一切似乎都很粗糙,我想我一定错过了一些技巧。当我们看不到你在做什么的时候,很难说你错过了什么。如果我们可以自己复制它,我们可以帮助你…这样做很可能会导致意想不到的结果。将
NUnitCommonTestClass
标记为
[TestFixture]
然后允许
SpecificTestClass
从中继承将允许测试套件多次运行基类中的所有测试。例如:如果基类有10个测试,子类有10个测试,那么将运行的测试总数是基类的10个+运行基类的测试的子类的10个+子类本身的10个=30个测试。我的猜测是,您希望运行20个测试,而不是30个。修复OP应该使基类成为抽象类的问题。@Quinn只有在从基类程序集和子类程序集运行所有测试时,才会发生这种情况,您可以很容易地避免这种情况。所以我真的不明白你的意思,作为另一个答案的否决票也不能提供与我相同的指导。只是为了确保-您是否意识到基类在它自己的程序集中,对吗?