VS 2010: передать результаты TestMethod другому Testmethod - PullRequest
1 голос
/ 15 марта 2011

У меня есть два [TestMethods].Результат метода А должен быть входом метода В.Проблема в том, что все значения и переменные сбрасываются при запуске нового метода тестирования.

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

Все, что я хочу, - это работать следующим образом:

Guid CustomerID;

[TestMethod]
public void CreateCustomer()
{   
    // Create a new customer and store the customer id   
    CustomerID = CreateNewCustomer();
    Assert.IsNotNull(...);
}

[TestMethod]
public void DeleteCustomer()
{   
    // Delete the customer created before   
    var ok = DeleteCustomer(CustomerID);   
    Assert.IsNotNull(...);
}

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

Есть идеи?

Ответы [ 2 ]

1 голос
/ 16 марта 2011

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

1 голос
/ 15 марта 2011

Почему бы не создать клиента в своем тесте удаления клиента?

 [TestMethod]
 public void CreateCustomer()
 {   
     // Create a new customer and store the customer id   
     var customerID = CreateNewCustomer();
     Assert.IsNotNull(...);
 }

[TestMethod]
public void DeleteCustomer()
{   
    // Delete the customer created before          
    var customerID = CreateNewCustomer(); 
    var ok = DeleteCustomer(customerID);   
    Assert.IsNotNull(...);   
}

или просто создать клиента в настройке testfixture:

(Имя TestFixtureSetUp может отличаться вТестовая среда VS, это то, что она называется в NUnit, но будет эквивалент)

private Guid CustomerID;

[TestFixtureSetUp]
{
    **EDIT** you could ensure you DB is clean here:
    CleanDB();
    CustomerID = CreateNewCustomer();
}


[TestMethod]
public void CreateCustomer()
{   
    // check previously created customer           
    Assert.IsNotNull(...);
}

[TestMethod]
public void DeleteCustomer()
{   
    // Delete the customer created before          
    var ok = DeleteCustomer(CustomerID);   
    Assert.IsNotNull(...);
}

[TestFixtureTearDown]
{
    **EDIT** or you could ensure you DB is clean here:
    CleanDB();
}

На мой взгляд, первое решение лучше, поскольку каждый тест отвечает за создание своих собственных данных, но еслиэто интеграционный тест, который на самом деле помещает материал в базу данных и из нее, тогда (опять же, на мой взгляд) вполне нормально иметь данные, необходимые для всех тестов, которые необходимо выполнить в настройке для этого класса, и тогда все тесты могут выполняться ожидаемым образом.данные будут там.Тем не менее, вы должны убедиться, что у каждого тестового класса есть соответствующий тестовый набор, который удалит тестовые данные этих классов из БД, или что вы очищаете БД где-то перед запуском каждого тестового класса (как в общем базовом классе)

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