Пропустить метод SetUp только для определенного теста в NUnit?

У меня есть тест, где мне не нужно запускать метод SetUp (приписываемый [SetUp]) перед запуском теста. Мне нужен метод SetUp для других тестов.

Есть ли другой атрибут, который можно использовать, или способ, основанный на неатрибуте, для достижения этого?

Ответы

Ответ 1

Вы должны создать новый класс для этого теста, который имеет только настройку (или отсутствие настройки), которая ему нужна.

В качестве альтернативы, вы можете отключить установочный код в методе, который вызовут все остальные тесты, но я не рекомендую этот подход.

Ответ 2

Вы также можете добавить категорию и просмотреть список категорий в своей настройке:

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

Основной 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
}

Ответ 4

Вот код, который я предлагаю для выполнения того, что вы хотите:

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

Я не верю, что вы можете это сделать, это связано с пониманием того, какой тест должен был запускаться, и я не думаю, что это возможно.

Я предлагаю вам поместить его в другую [TestFixture]

Ответ 6

Вот код, который я предлагаю для выполнения того, что вы хотите.

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()
{

}