Подтвердить что ты не робот

Как заказать методы выполнения с помощью Visual Studio для тестирования интеграции?

У меня есть 2 вопроса в отношении проведения тестирования интеграции с использованием VS 2010

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

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

[TestClass]
public class UnitTest1
{
    int i = 0;
    [TestMethod]
    public void TestMethod1()
    {
        i = 5;
    }

    [TestMethod]
    public void TestMethod2()
    {
        Assert.AreEqual(5, i);
    }
}

Итак, есть ли способ сделать это?

4b9b3361

Ответ 1

Чтобы выполнить тесты в определенном порядке, я выполнил следующие шаги:

В тестовом проекте с test1, test2 и test3

1 Щелкните правой кнопкой мыши на проекте "Добавить" → "новый тест..."
2 Выберите "Упорядоченный тест"
3 Двойной щелчок в файле, который появляется "OrderedTest1.orderedtest"

alt text

4 Создайте проект, если он не был создан ранее
5 Из списка доступных тестов выберите требуемый тест и закажите его

alt text

С этого момента появляется новый тест в редакторе тестовых списков

alt text

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

Ответ 2

Лучше всего использовать функции для настройки тестов и их очистки, используя атрибуты [TestInitialize] и [TestCleanUp] или [ClassInitialize] и [ClassCleanup].
http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting(v=VS.100).aspx

Следующий код - пример подобной вещи, которую вы хотите:

[TestClass]
public class UnitTest1
{
    int i=0;

    [TestInitialize]
    public void Setup()
    {
        i = 5;
    }

    [TestMethod]
    public void TestMethod1()
    {
        Assert.AreEqual(5, i);
    }
}

Функция SetUp вызывается перед выполнением каждого теста. Если вам нужно передать значение из одного теста другому, вы можете рассмотреть возможность использования статической переменной, которая не рекомендуется из-за неопределенного порядка выполнения.

Обычно существует способ избежать необходимости в определенном порядке, используя технику настройки/очистки, но это правда, что это может быть неверно для очень сложных тестов интеграции.
Если нет возможного способа избежать их переупорядочения, вы можете рассмотреть вопрос о слиянии их в одном, снова нарушив наилучшую практику наличия только одного утверждения на тест, но если они так сильно зависят друг от друга, возможно, это еще лучше так как в этом случае один провал теста может скомпрометировать результат других.

EDIT: Может быть, использование заказанных тестов отвечает на вопрос 1 и использование статических переменных вопрос 2: http://msdn.microsoft.com/en-us/library/ms182631.aspx