2016-09-01 13 views
0

私はテストでアイテムを作成し、次のテストでサブアイテムを作成するユニットテストプロジェクトを開発しています。次のテストで[ValueSourceAttribute] Nunitテストの出力を使用します。

これらのテストはパラメータ化されたテストであり、これらのパラメータはランタイムで収集されるため、プロジェクトの開始時に開始されます。まだ「最初のテストをまだ実行していないので」まだ作成されていないため、データベースから親アイテムを取得できません。

回避策はありますか?

第一の機能:

[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); 
} 

更新:私はクリアにGUIからクリックすると、テストデータが再ロードされた固定具、 GUIなしでそれを行う方法はありますか?

答えて

0

単体テストでは、1つのテストが別のテストに依存する(つまり、その出力を使用する)ことは一般的に悪いことです。この場合、NUnitでは実際には不可能です。

NUnitはテストが実行されるよりずっと前に作成されるため不可能です。 NUnitは、テストが存在するかどうかをNUnitが決定し、使用する場合はGUIに値を設定するときに、「ロード時間」と呼ばれる場所でTestCaseSourceメソッドを呼び出します。

テストのコードは、テストの「実行時」に実行されます。 GUIでは、これは、たとえば、[実行]をクリックするたびに、負荷ごとに複数回発生することがあります。

私はこれをGUIの観点から説明していますが、これは簡単に概念化できるためです。 NUnitは、バッチでもインタラクティブでも、同じ方法で動作します。

テストが実行される前に何かが発生したければ、OneTimeSetUp(NUnit V2のTestFixtureSetUp)を使用して設定することができます。クラスのメンバを使用して、その実行から必要なものを保存し、テストからアクセスできます。しかし、これはテストがロードされた後も何十年も(コンピュータの言葉で)「実行時」に発生します。

関連する問題