我有一個私人方法正在被調用的方法,我正在testing.I想驗證正確的參數正在傳遞給這個私人方法。我已經在Moq中編寫了以下設置,它將測試我想要的內容,但它並不真正允許我遵循Arrange,Act,Assert模式。有沒有更好的方法用Moq編寫這個測試?
有沒有什麼方法可以執行類似的測試,其中assert可以出現在我的所有其他斷言中?目前下面的代碼存在於編配中。
myClass.Setup(
x =>
x.myMethod(
It.IsAny<Person>>(),
It.IsAny<string>(),
It.IsAny<Person>(),
It.IsAny<ICollection<string>>(),
It.IsAny<ICollection<string>>(),
It.IsAny<bool>())).Callback
<Person, string, Person, Person, ICollection<string>, bool>(
(a, b, c, d, e, f) =>
{
Assert.AreEqual("NameA", a.Name);
Assert.AreEqual("StringB", b);
Assert.AreEqual("NameC", c.Name);
Assert.AreEqual(2, d);
var dList = d.ToList().OrderBy(x => x.Name);
Assert.AreEqual("PersonA", dList[0].Name)
Assert.AreEqual("PersonB", dList[1].Name);
});
我應該說,我知道,你可以perfom校驗來檢查方法是否調用了一定的投入,但我不知道的匹配ICollection的則params的任何方式。
嗨,感謝您的評論。你是對的,我不應該測試私人方法。編寫示例時我犯了一個錯誤,它實際上是我試圖測試的一個依賴。 Ufuk給出的答案在這種情況下有所幫助。 – user460667 2012-04-17 14:22:39
@ user460667沒問題,只是建議別人不要測試什麼不應該測試:) – 2012-04-17 14:31:43