仅针对NUnit中的特定测试跳过SetUp方法?

时间:2009-07-28 13:46:10

标签: unit-testing nunit

我有一个测试,在运行测试之前我不需要运行SetUp方法(归因于[SetUp])。我需要运行SetUp方法进行其他测试。

是否可以使用不同的属性或基于非属性的方法来实现此目的?

7 个答案:

答案 0 :(得分:22)

您还可以添加类别并检查设置中的类别列表:

public const string SKIP_SETUP = "SkipSetup"; 

[SetUp]
public void Setup(){
   if (!CheckForSkipSetup()){
        // Do Setup stuff
   }
}

private static bool CheckForSkipSetup() {
    ArrayList categories = TestContext.CurrentContext.Test
       .Properties["_CATEGORIES"] as ArrayList;

    bool skipSetup = categories != null && categories.Contains( SKIP_SETUP );
    return skipSetup ;
}

[Test]
[Category(SKIP_SETUP)]
public void SomeTest(){
    // your test code
}

答案 1 :(得分:17)

您应该为该测试创建一个新类,它只需要设置(或缺少设置)。

或者,您可以将设置代码解释为所有其他测试调用的方法,但我不建议使用此方法。

答案 2 :(得分:2)

您可以在基类中使用主SetUp

[SetUp]
public virtual void SetUp()
{
  // Set up things here
}

...然后在你没有运行SetUp代码的测试的类中覆盖它:

[SetUp]
public override void SetUp()
{
  // By not calling base.SetUp() here, the base SetUp will not run
}

答案 3 :(得分:1)

以下是我建议您完成所需内容的代码:

public const string SKIP_SETUP = "SkipSetup";

private static bool CheckForSkipSetup()
{
    string category = string.Empty;
    var categoryKeys = TestContext.CurrentContext.Test.Properties.Keys.ToList();

    if (categoryKeys != null && categoryKeys.Any())
        category = TestContext.CurrentContext.Test.Properties.Get(categoryKeys[0].ToString()) as string;

    bool skipSetup = (!string.IsNullOrEmpty(category) && category.Equals(SKIP_SETUP)) ? true : false;

    return skipSetup;
}

[SetUp]
public void Setup()
{
    // Your setup code
}

[Test]
public void WithoutSetupTest()
{
    // Code without setup
}

[Test]
[Category(SKIP_SETUP)]
public void CodeWithSetupTest()
{
    // Code that require setup
}

答案 4 :(得分:0)

我不相信你能做到这一点,这将涉及知道哪些测试即将开始,我认为不可能。

我建议你把它放在另一个[TestFixture]

答案 5 :(得分:0)

以下是我建议您完成所需内容的代码。

public const string SKIP_SETUP = "SkipSetup";

现在添加以下方法:

private static bool CheckForSkipSetup()
{               
    var categories = TestContext.CurrentContext.Test?.Properties["Category"];

    bool skipSetup = categories != null && categories.Contains("SkipSetup");
    return skipSetup;
}

现在检查条件如下:

[SetUp]
public async Task Dosomething()
{
    if (!CheckForSkipSetup())
    {

    }
}

在测试用例中使用以下内容:

[Test]
[Category(SKIP_SETUP)]
public async Task Mywork()
{

}

答案 6 :(得分:0)

每个@MiGro 回答 here 我通过使用另一个测试命名空间和它自己的 [OneTimeSetUp] 来实现它,并为我想开始以与其他人不同的方式测试的类使用不同的实现。