在我正在測試的應用程序中,我想確保對某些輸入記錄器被調用。一些方法有不同的可能的記錄器消息(例如「值格式錯誤」,「值超出範圍」)。因此,我想確保記錄器被正確的消息調用。如何使用正確的可本地化格式化字符串來調用記錄器的單元測試?
自動存檔的記錄器字符串在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