作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试理解 .NET 的代码契约。使用代码契约时,如何记录导致相关方法失败的断言。例如,看一下这段代码:
Public IsMatch(string x, string, y)
{
Contract.Assert(!string.IsNullOrWhiteSpace(x));
Contract.Assert(!String.IsNullOrWhitespace(y));
return x == y;
}
假设x = string.Empty
。这将导致该方法失败。如何记录断言导致上述方法失败。我可以在一个大型应用程序中拥有许多这样的断言,并且很高兴知道哪一个是麻烦制造者。
最佳答案
When using code contract, how do I log the assert causing the method in question to fail?
如果您谈论日志记录,我假设您指的是运行时而不是静态验证。
断言失败时会引发异常。您可以编写一个 try/catch block 来记录异常:
try
{
bool result = SomeClass.IsMatch(x, y);
}
catch(Exception e)
{
logger.Error(e.ToString()); // Use whatever logging mechanism here
throw; // Note: Make sure you rethrow if you catch "Exception e"
}
这将为您提供异常的堆栈跟踪,该跟踪将指向断言失败的行。
正如 Poality 所提到的,您还可以在每个断言上包含一个 userMessage
参数。这样,除了堆栈跟踪之外,您的日志还将包含自定义错误消息。
如果您需要一个好的logger
类,请查看the NLog library .
关于c# - 如何将日志记录集成到 .NET 代码合约中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7801691/
我是一名优秀的程序员,十分优秀!