2009-11-05 185 views
0

我是新來的NUnit的測試,我想測試下面的構造:使用NUnit測試構造

public class IngredientDAONHibernate : NutritionLibrary.DAO.IngredientDAO 

    { 

      private Configuration config; 
     private ISessionFactory factory; 

     public IngredientDAONHibernate() 
     { 
      try 
      { 
       config = new Configuration(); 
       config.AddClass(typeof(NutritionLibrary.Entity.Ingredient)); 
       config.AddClass(typeof(Entity.Nutrient)); 
       config.AddClass(typeof(Entity.NutrientIngredient)); 
         factory = config.BuildSessionFactory(); 
      } 
      catch (Exception e) 
      { 

       // logger.Error("Exception Occured", e); 
      } 
     } 

測試存根如下:

[TestMethod()] 
     public void IngredientDAONHibernateConstructorTest() 
     { 
      IngredientDAONHibernate target = new IngredientDAONHibernate(); 

     } 

有人能幫助我關於如何開始的一些提示?謝謝!

+0

在構造函數中發生的任何異常都不會冒泡,請嘗試將try-catch,運行您的單元測試。希望如果失敗了,你會知道它:) – PostMan 2009-11-05 03:39:46

回答

1

我建議你不要捕獲所有的例外,但是,如果有一定要趕上和忽視然後就做這些,否則它是很難說,如果你有問題。

我傾向於不測試的構造,除非它是做了不少,這將是明顯的,如果有這樣做時,其他單元測試,因爲,如果構造失敗,你應該通過例外看到一個問題,而且所有的測試都會失敗。

如果你想測試此構造,限制你的例外,只是確保沒有任何異常,當你運行測試。

1

讓我把這個問題重新給你..你怎麼知道,如果按預期的構造函數執行?

通常構造是微不足道的..但在這裏似乎你有一些第三方的lib的接口,你需要一些信心與代碼。

如果你只是想測試沒有從構造方法中拋出的異常......然後提取記錄器接口。現在在模擬記錄器中的測試過程中(假冒也可以),這應該可以幫助您檢測是否記錄了異常。

[TestMethod()] 
     public void IngredientDAONHibernateConstructorTest() 
     { 
      _errorLogged = false; 
      ILogger logger = this; // make test fixture implement the logger interface ; self-shunt 
      IngredientDAONHibernate target = new IngredientDAONHibernate(logger); 

      Assert.IsNotNull(target); 
      Assert.IsFalse(_errorLogged, 
       String.Format("ERROR! Constructor has thrown {0}", _loggedException)); 
     } 

     bool _errorLogged; 
     Exception _loggedException; 
     public void Error(string message, Exception e) 
     { 
      _errorLogged = true; 
      _loggedException = e; 
     } 
1

像其他人一樣,我奉勸不要捕捉異常。文檔應該告訴你什麼樣的異常是可以預料的,並且你可以爲它們中的每一個寫出特定的Catch子句,如果這是有道理的。

離開那個放在一邊,你的測試應該確認你的對象是你所期望的狀態。鑑於我們可以看到,你所能做的就是測試它不是null。如果可以強制執行異常,則可以測試記錄器是否獲取異常消息。如果有一個允許訪問工廠的公共屬性,您可能想要測試該屬性(不是null,也許是其他的東西),同樣也需要配置字段。爲此,如果您有權訪問添加的類,則可以測試不爲null並計數== 3。如果確切的物體是重要的,你可以測試它們在那裏。決定多少信任第三方的東西總是很棘手。一般來說,除非我得到證據證明我不應該這樣做。

說到測試方法,測試每個參數是否可能。所以,對於一個字符串,測試null和emptystring加上相關的(有效和無效的)值。如果您期待字母數字,請測試特殊字符。如果數據邊界上有邊界測試值和邊界上的邊界(典型值)。例如。如果您期望0到10之間的整數,則測試-1,0,1,5,9,10,11。只需幾秒鐘即可完成編寫,但在您嘗試修復時可以在兩年內爲您節省數小時一個錯誤。