2010-04-26 49 views
2

更多的問題:C# unit test code questionsC#單元測試代碼問題繼續在這裏提問後

我發現VS單元測試testframe從public方法治療以同樣的方式privateprotected方法,但輸精管。

下面是一個private方法生成的代碼:

 /// <summary> 
     ///A test for recordLogin 
     ///</summary> 
     [TestMethod()] 
     [DeploymentItem("SystemSoftware.exe")] 
     public void recordLoginTest() 
     { 
      User_Accessor target = new User_Accessor(); // TODO: Initialize to an appropriate value 
      Guid userId = new Guid(); // TODO: Initialize to an appropriate value 
      string action = string.Empty; // TODO: Initialize to an appropriate value 
      Users user = null; // TODO: Initialize to an appropriate value 
      AndeDBEntities db = null; // TODO: Initialize to an appropriate value 
      bool expected = false; // TODO: Initialize to an appropriate value 
      bool actual; 
      actual = target.recordLogin(userId, action, user, db); 
      Assert.AreEqual(expected, actual); 
      Assert.Inconclusive("Verify the correctness of this test method."); 
     } 

問題:

  1. [DeploymentItem("SystemSoftware.exe")]privateprotected方法,爲什麼需要它,它是什麼呢?

  2. 在我的原始類/文件中,如果我指向原始方法並嘗試「Find All References」。單元測試類/文件中的引用不會顯示爲privateprotected方法,但會顯示所有方法的public方法。這是爲什麼?這樣對嗎?

回答

1

[DeploymentItem( 「SystemSoftware.exe」)是private和protected方法,爲什麼需要它,它是什麼呢?

它定義(文件)測試需求的資源(可以應用到測試類或單個方法)。由於測試方法必須公開,所以我不明白你爲什麼會將此應用於privateprotected方法。

屬性被記載:因爲他們使用的訪問類(User_Accessor),而不是真正的類(User)來訪問protectedprivate方法http://msdn.microsoft.com/en-us/library/microsoft.visualstudio.testtools.unittesting.deploymentitemattribute.aspx

1

Find All References不會發現這些測試。訪問器類是自動生成的,並執行一些技巧來公開那些通常不可訪問的方法。

2

[DeploymentItem(「SystemSoftware.exe」) 是私有和保護方法, 爲什麼需要它,它是什麼呢?

您不能訪問私有,保護或從單元測試是在一個不同的組件,並且不從你試圖測試(也如果有可能的類繼承內部成員的「單元「進行測試不止是一個班級)。要訪問私有,受保護或內部成員,MSTest框架將生成訪問程序集,該訪問程序集允許代理訪問這些隱藏的成員。

DeploymentItemAttribute指示測試運行器需要部署哪些工件(以及依賴項(如訪問器程序集或測試數據文件)),以便代碼可以正確執行。實質上,它隱含地告訴MSTest框架在這種情況下生成和部署訪問器程序集。

我在原來的類/文件,如果我點 原來的方法,並嘗試 「查找所有引用」。參考 在單元測試類/文件將不會 顯示爲私人和受保護的 方法,但它會顯示所有 公共方法。這是爲什麼?它是 對不對?

請參閱上文,您不是直接訪問它們,而是使用代理來執行此操作。此代理使用運行時反射來綁定您的調用,因此無法在Visual Studio中進行跟蹤。