我是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 :(得分:1)
我建议你不要抓住所有的例外情况,但是,如果你确定要抓住并忽略那些,那就去做那些,否则很难判断你是否有问题。
我倾向于不测试构造函数,除非它做了很多,并且很明显,如果在执行其他单元测试时出现问题,因为如果构造函数失败,您应该看到异常,并且由于所有测试都将失败。
如果要测试此构造函数,请限制异常,并确保在运行测试时没有异常。
答案 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;
}
答案 2 :(得分:1)
和其他人一样,我会警告不要捕捉异常。文档应告诉您可以预期的异常,如果有意义,您可以为每个异常编写特定的Catch子句。
除此之外,您的测试应验证您的对象是否处于您期望的状态。鉴于我们可以看到的,你所能做的只是测试它不是空的。如果您可以强制执行异常,则可以测试记录器是否收到异常消息。如果有一个公共属性可以访问您的工厂,您可能希望测试它(不是null,也许是其他东西),并且同样使用config字段。为此,如果您可以访问添加的类,则可以测试非null并计算== 3。如果确切的对象很重要,您可以测试它们在那里。决定信任多少第三方的东西总是很棘手。一般来说,除非我得到我不应该的证据,否则我会这样做。
在测试方法方面,尽可能测试每个参数。因此,对于字符串,测试null和emptystring以及相关(有效和无效)值。如果您期待字母数字,也可以测试特殊字符。如果数据在边界和边界的任何一侧都有边界测试值加上典型值。例如。如果您期望0到10之间的int,请测试-1,0,1,5,9,10,11。只需几秒钟即可完成写入但是当您尝试修复时,它可以在两年内节省您的时间一个错误。