Skip the SetUp method only for a particular test in NUnit?

自闭症网瘾萝莉.ら 提交于 2019-12-30 04:00:32

问题


I have a test where I do not need to run the SetUp method (attributed with [SetUp]) before running the test. I need the SetUp method to be run for other tests.

Is there a different attribute that can be used or a non-attribute-based way to achieve this?


回答1:


You should create a new class for that test which has only the setup (or lack of setup) that it needs.

Alternatively, you could unfactor the setup code into a method that all the other tests call, but I don't recommend this approach.




回答2:


You could also add a category and inspect the category list in your setup:

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
}



回答3:


You can have the main SetUp in a base class:

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

...and then override it in the class where you have the tests that should not run the SetUp code:

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



回答4:


Here is the code that I suggest for accomplishing what you want:

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
}



回答5:


I don't believe you can do that, it would involve knowing what test was about to run which I don't think is possible.

I'd suggest you put it within a different [TestFixture]




回答6:


Here is the code that I suggest for accomplishing what you want.

public const string SKIP_SETUP = "SkipSetup";

Now add the following method:

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

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

Now check the condition as follows:

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

    }
}

Use these in test cases as follows:

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

}


来源:https://stackoverflow.com/questions/1194198/skip-the-setup-method-only-for-a-particular-test-in-nunit

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!