sowmya19 Ответов: 3

Нужно знать атрибут порядка выполнения в NUnit


using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Framework;
using TestNUnit;
 
namespace UnitTest
{
    [TestFixture]
    public class NUnit
    {
        MyTest test=null;
        [SetUp]
        public void Initialize()
        {
            test = new MyTest();
        }
        [TearDown]
        public void CleanUp()
        {
            test = null;
        }
        [Test]
 
        public void Addition()
        {
            Assert.AreEqual(5, test.Add(2, 3));
        }
        [Test]
 
        public void Substraction()
        {
            Assert.AreEqual(0, test.Substract(2, 2));
 
        }
        [Test]
 
        public void Divide()
        {
            Assert.AreEqual(1, test.Devide(2, 2));
        }
    }
}



в приведенном выше коде у меня есть 3 метода [Test]. когда мы запускаем их, они работают в алфавитном порядке.

я хочу работать в определенном пользователем порядке.

первый метод вычитания(), второй метод деления() и третий метод сложения ().

может ли кто-нибудь помочь мне, пожалуйста

3 Ответов

Рейтинг:
2
Рейтинг:
2

Bernhard Hiller

Просто убедитесь, что имена расположены в алфавитном порядке, то есть начинаются с 1_Substract, 2_Divide, 3_Add. По моему опыту, этот простой трюк работает надежно.


Рейтинг:
1

Damian Suess

При создании тестов с помощью NUnit они будут выполняться в алфавитном порядке.

Для получения дополнительной информации ознакомьтесь с официальной документацией NUnit.

При создании тестового набора они должны быть независимы друг от друга. В тех случаях, когда вы хотите разместить более медленные тесты последними, группируя похожие или что-то еще, есть несколько решений.

Начиная с версии NUnit 3.2 вы можете использовать Атрибут OrderAttribute.

public class TestFixture
{
  [Test, Order(1)]
  public void FirstTest()
  {
    Assert.AreEqual(1, 1);
  }

  [Test, Order(2)]
  public void SecondTest()
  {
    Assert.AreEqual(2, 2);
  }


Еще одним обходным путем для более старых версий является использование Атрибут теста Однако для этого необходимо ввести аргумент в функцию. То Testname реальным свойство будет действовать как ваш порядок сортировки.

public class TestFixture
{
  [TestCase(1, TestName = "Test1")]
  public void FirstTest(int unused)
  {
    Assert.AreEqual(1, 1);
  }

  [TestCase(2, TestName = "Test2")]
  public void SecondTest(int unused)
  {
    Assert.AreEqual(2, 2);
  }


А для еще одного обходного пути для более старой версии NUnit вы можете использовать Категория атрибут.

public class TestFixture
{
  [Test]
  [Category("1st")]
  public void FirstTest()
  {
    Assert.AreEqual(1, 1);
  }

  [Test, Category("2nd")]
  public void SecondTest()
  {
    Assert.AreEqual(2, 2);
  }

  [Test, Category("3rd"), Description("Optional in-line attribute")]
  public void ThirdTest()
  {
    Assert.AreEqual(3, 3);
  }


Maciej Los

Что ж... Этому вопросу уже 4 года...

Damian Suess

Ему может быть 4 года, но он жизнеспособен и доступен для поиска через топ-10 результатов google. Не знаю, почему голосование вниз, поскольку это допустимое решение, а не обходной путь.

Maciej Los

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

Damian Suess

Спасибо, Мацей, что предупредил. Спасибо вам за это!