Как заказать методы выполнения с использованием Visual Studio для проведения интеграционного тестирования? - PullRequest
18 голосов
/ 13 января 2011

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

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

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

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

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

Так есть ли способ сделать что-нибудь из этого?

Ответы [ 2 ]

21 голосов
/ 14 января 2011

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

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

1 Щелкните правой кнопкой мыши по проекту «Добавить» -> «Новый тест ...»
2 Выберите «Заказанный тест»
3 Дважды щелкните файл, который отображается как «OrderedTest1.orderedtest»

alt text

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

alt text

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

alt text

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

6 голосов
/ 13 января 2011

Рекомендуется использовать функции для настройки тестов и их очистки, используя атрибуты [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 будет вызываться перед выполнением каждого теста.Если вам нужно передать значение из одного теста в другой, вы можете рассмотреть возможность использования статической переменной, которая не рекомендуется из-за неопределенного порядка выполнения.

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

РЕДАКТИРОВАТЬ: Может быть использовать упорядоченные тесты ответы на вопрос 1, и использовать статические переменные вопрос 2: http://msdn.microsoft.com/en-us/library/ms182631.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...