2016-02-26 69 views
3

是否有可能定义与NUnit的一种方法,这将在装配前执行每个测试之前执行?NUnit的 - 全球方法每个测试

要非常清楚:我不想以前所有测试执行一次一些代码,但我需要在每次测试之前做一些常规设置。所以如果我有10个测试,我想让我的方法执行10次。

继承是可悲的是不是一种选择,我(我已经将它用于不同的目的,不能混用)

回答

8

可以定义包含在其之前的方法所需要的代码的操作属性。用一个参数将其应用到程序集中,指出它应该用于每个测试。

请注意,动作属性在NUnit 2和3之间有点不同,所以一定要检查文档的适当级别。

+0

真棒!谢谢!!! – synek317

1

SetUpTearDown属性。

+0

你能解释一下为什么你不能使用继承?您是否继承了不同类别的测试装置而没有单个父级? –

+0

此外,您还可以使用动态生成的组件?即,构建之后,但在单元测试执行一些代码,并使用新生成的组件进行单元测试。在这种情况下,您可以继承您的测试类并将您的设置方法添加到每个使用的反射。但Arturo的答案是最简单的选择。 –

3

您可以使用SetupAttribute设置一个方法,该方法将在类别TextFixture中的每个测试之前执行,但仅限于此。

事情是这样的:

[TestFixture] 
class SomeTests 
{ 
    [SetUp] 
    public void SetupBeforeEachTest() 
    { 
     //Some code 
    } 
} 

我知道你说你不能使用继承,但是如果你想在大会每次测试之前执行的方法,我觉得这是最好的方法,自SetUp属性从任何基类继承。因此,如果一个基类定义了一个SetUp方法,该方法将在派生类每个测试方法之前调用:

abstract class BaseTestFixture 
{ 
    [SetUp] 
    public void SetupBeforeEachTest() 
    { 
     //Some code 
    } 
} 

[TestFixture] 
class SomeTests : BaseTestFixure 
{ 
    //Tests 
} 
+0

是的,我将这种方法用于不同的目的。我在其他程序集中定义了3种不同的通用'TestClass'(0-2类型参数)变体,我希望我的项目可以使用这些TestClass,并以类似的方式添加其他类。 – synek317