尽管有许多使用Pester声明模拟的例子,但我找不到关于如何使用Pester来获取模拟的参数的良好(或任何)例子;这对于获得有意义的错误消息很有用,而不是有用的通用消息:
谢谢,显然;可能也是一个“行不通”的问题。
例如,在RhinoMocks + NUnit(C#)中,可能使用类似于以下代码的代码来断言该模拟程序已被调用且参数匹配某些条件。如果进行了调用且参数不匹配,则会显示一条有用的断言消息:
var actual = mock.GetArgumentsForCallsMadeOn(m => ..);
Assert.That(actual, Is.EqualTo(expected));
在Pester中如何进行相同(或相似)操作?
的目标是使失败的模拟断言产生有用的错误消息,涉及哪些特定参数未能达到预期以及具有哪些值。
PowerShell是5.1,Pester是4.8.1。
最佳答案
我对带有参数检查的Pester测试有相同的问题。一直很难找到哪个参数可能导致给定的-ParameterFilter
表达式失败。
它在几个GitHub问题中提出:
但这似乎还没有任何决议或共识。如果可以的话,我会尝试添加到那里的对话中。
一位用户谈到要创建在
Assert-MockCalled
调用中调用的Verify函数:It 'multiple expressions, second line' {
Assert-MockCalled f 1 {
($a -eq 1 | Verify) -and
($b -eq 1 | Verify) -and
($b-1 -eq $a | Verify)
}
}
可以提供更好的输出,但这是解决该问题的一种hack琐/冗长的方法。
就个人而言,我的解决方法是编写多个
Assert-MockCalled
语句,每个语句都带有一个仅检查一个参数的-ParameterFilter
表达式,以便我可以根据哪个Assert-MockCalled
语句失败来知道哪个参数失败。但是,例如,如果在函数中多次调用模拟,则此方法将无法很好地工作。