在我正在测试的应用程序中,我想确保对某些输入记录器被调用。一些方法有不同的可能的记录器消息(例如“值格式错误”,“值超出范围”)。因此,我想确保记录器被正确的消息调用。如何使用正确的可本地化格式化字符串来调用记录器的单元测试?
自动存档的记录器字符串在RESX中,可能在将来进行本地化。此外,措辞可能会改变。因此,只要与硬编码的字符串进行比较,只要文本发生变化就可能导致相关测试中断。由于它们是可本地化的,这意味着我将不得不迫使单元测试在特定文化下执行,或者有更好的方法吗?
使之复杂化,RESX字符串实际上并不像上面那样简单,而是形式为"Line {0}: Value '{1}' at column {2} is malformed."
然后将其用作string.Format()的输入以生成"Line 12: Value '12a.45' at column 45 is malformed."
,例如。这是记录器实际得到的字符串。我应该将这个字符串硬编码到单元测试中吗?
编辑:
我会尝试一些更详细的解释,有非常简化的方法来说明我的意思:
public void ConvertSomething(object value)
{
if (/* Check if valid value */)
{
var convertedValue = /* Some conversion */ ;
if (/* Check is in range */)
{
// Do something
}
else
{
Logger.Log(string.Format(Resources.OutOfRange, LineNumber, convertedValue));
}
}
else
{
Logger.Log(string.Format(Resources.InvalidValue, LineNumber, value, ColumnNumber));
}
}
如何测试记录器被称为与正确的信息?我不能简单地检查是否有任何对记录器的调用。如果我给它一个有效但超出范围的值,但是有效性检查有一个错误,它会调用记录器,但带有“无效值”的消息,实际上应该是“超出范围”。
我可以模拟记录器,所以我可以看到它被调用,参数是什么。但是我应该坚持什么?
我认为这是一个整合,甚至是QA水平测试。我甚至不确定如何让机器以可靠的方式交换语言。 – 2011-03-21 11:21:38