2016-09-01 7 views
0

Я разрабатываю проект единичного тестирования, в котором я создаю элемент в тесте, а затем создаю подэлементы для него в следующем тесте.Использование выходного теста Nunit Test [ValueSourceAttribute] в следующем тесте

Эти тесты являются параметризованными тестами, и эти параметры собираются во время выполнения, поэтому при запуске проекта он запускается. Он не может получить родительский элемент из базы данных, потому что он еще не создан «поскольку я еще не запускал первый тест».

Есть ли обходной путь для этого?

Первая функция:

[Test, Sequential] 
public void AddInitiative([ValueSourceAttribute("Get_AddInitiatives_Data_FromExcel")]AddInitiative Initiative_Object) 
{ 
     string URL = "http://" + Server_name + Port_number + "/IntegrationHub/IntegrationHub.svc/RestUnsecure/AddInitiative"; 
     string Token = Get_Security_token("gpmdev\\administrator", "Xyz7890", TenantID_Input); 
     var Response = POST_Request(Initiative_Object, URL, Token); 
     Guid Returned_GUID = GenericSerializer<Guid>.DeserializeFromJSON(Response); 
     DataBase_Queries DB = new DataBase_Queries(); 
     List<StrategyItem> StrategyItemsFromDB=DB.GetStrategyItemByID(Returned_GUID.ToString()); 
     Assert.AreEqual(Initiative_Object.Initiative.Name_En, StrategyItemsFromDB[0].Name_En); 
} 

Вторая функция, которая не:

[Test, Sequential] 
public void AddInitiativeMilestones([ValueSourceAttribute("Get_AddInitiativeMilestones_Data_FromExcel")]AddMilestone Milestone_Object) 
{ 
     string URL = "http://" + Server_name + Port_number + "/IntegrationHub/IntegrationHub.svc/RestUnsecure/AddInitiativeMilestones"; 
     string Token = Get_Security_token("gpmdev\\administrator", "Xyz7890", TenantID_Input); 
     var Response = POST_Request(Milestone_Object, URL, Token); 
     List<Milestone> Returned_Milestone = GenericSerializer<List<Milestone>>.DeserializeFromJSON(Response); 
     DataBase_Queries DB = new DataBase_Queries(); 
     List<StrategyItem> StrategyItemsFromDB = DB.GetStrategyItemByID(Returned_Milestone[0].ID.ToString()); 
     Assert.AreEqual(Milestone_Object.Milestones[0].Name_En, Returned_Milestone[0].Name_En); 
     Assert.AreEqual(Milestone_Object.Milestones[0].Name_En,StrategyItemsFromDB[0].Name_En); 
} 

Update: Когда я нажал из графического интерфейса на Clear фиксатору данные испытаний был перезагружен, но это там способ сделать это без GUI?

ответ

0

Как правило, плохая практика в модульных тестах заключается в том, что один тест зависит от (другого результата) от другого теста. В этом случае с NUnit это фактически невозможно.

Это невозможно, потому что NUnit создает тесты задолго до их выполнения. NUnit будет вызывать ваши методы TestCaseSource тем, что мы называем «временем загрузки», когда NUnit решает, какие тесты существуют, и заполняет графический интерфейс, если вы его используете.

Код в ваших тестах выполняется во время выполнения тестов. В gui это может произойти несколько раз для каждой загрузки - каждый раз, когда вы нажимаете «Выполнить», например.

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

Если вы хотите, чтобы что-то произошло только один раз, прежде чем запускать какие-либо тесты, вы можете использовать OneTimeSetUp (TestFixtureSetUp в NUnit V2), чтобы настроить его. Вы можете использовать члена класса, чтобы сохранить все, что вам нужно, от этого выполнения и получить доступ к нему из ваших тестов. Однако это все равно произойдет в «время выполнения», десятилетий (в компьютерных терминах) после того, как ваши тесты будут загружены.

Смежные вопросы