简单的问题如何显示异常消息

时间:2010-08-12 10:51:12

标签: c# unit-testing nhibernate nunit-2.5

我有一个看似愚蠢和简单的问题,但我几乎不知道如何继续下去。

我的问题是:

如何修改异常消息并对其进行自定义以使我仍然通过单元测试?

其实我想自定义异常消息给“学生”Johny“有相关文件!”并且修改了API异常消息,单元测试失败。

Johny是一个可能改变的变量......

任何帮助我如何实现上述目标。感谢


在我的测试课中我有

        [ExpectedException(ExceptionType = typeof(Exception), ExpectedMessage = "The DELETE statement conflicted with the REFERENCE constraint \"FK_Issue_Priority\"")]

实际上我正在使用NHibernate,在我的API中我处理异常如下:

catch (NHibernate.ADOException exception)
        {
            if (exception.InnerException.GetType().Equals(typeof(System.Data.SqlClient.SqlException)))
            {
                if (exception.InnerException.Message.Contains("FK_Issue_Priority"))
                {
                    throw new Exception("The DELETE statement conflicted with the REFERENCE constraint \"FK_Issue_Priority\"");
                }
                else
                {
                    throw new Exception("A database error occurred while trying to add the customer to project relation please the see inner exception for details", exception.InnerException);
                }
            }
            else
            {
                throw exception;
            }
        }

2 个答案:

答案 0 :(得分:2)

出于这个原因,我不会在单元测试中测试异常消息的确切内容 - 它们往往是可变的。

相反,您有两种选择:

  1. 明确地派生一个新的基于Exception的类用于抛出此方法(例如'RelatedFilesExistedException'类)。单元测试可以简单地检查是否正在返回正确的异常类型,而不必担心与消息文本完全匹配。

  2. 仅部分匹配异常消息(您必须编写自己的测试代码,而不是回复ExpectedException属性)。

答案 1 :(得分:0)

  1. 为Herbie博士建议的不同内容创建不同的异常类。
  2. 我不会将异常用于正常的控制流程。还有其他语言结构,比如if-else。例外是出于特殊行为。
  3. 我不会让用户点击不允许他们点击的按钮。显示消息而不是按钮可以更加用户友好。