2009-11-05 100 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。只需几秒钟即可完成编写,但在您尝试修复时可以在两年内为您节省数小时一个错误。