我有一个私人方法正在被调用的方法,我正在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