gpt4 book ai didi

unit-testing - Foq Mock.Expect with Times > 1 总是失败

转载 作者:行者123 更新时间:2023-12-04 05:25:44 24 4
gpt4 key购买 nike

我发现的所有 Mock.Expect 示例都没有使用 Times 而不是 0 或 1(从不,一次)。我修改了 Foq.Usage.fsx 中的现有测试之一以尝试不是 0 或 1 的东西,但我无法使其工作。

有人看错了吗?

let [<Test>] ``expect method is called the specified number of times`` () =
// Arrange
let xs = Mock.Of<System.Collections.Generic.IList<int>>()
// Assert (setup)
Mock.Expect(<@ xs.Contains(0) @>, never)
Mock.Expect(<@ xs.Contains(1) @>, once)
Mock.Expect(<@ xs.Contains(2) @>, exactly 2)
// Act
xs.Contains(1) |> ignore
xs.Contains(2) |> ignore
xs.Contains(2) |> ignore
// Assert
verifyAll xs

最佳答案

这是 Foq 中的错误,当您使用 Mock.Expect 时,它会检查在模拟调用时是否满足预期。如果未满足给定的期望,则会抛出异常。这在理论上可能是有用的,因为它在未满足期望的确切点提供堆栈跟踪。

exactly 2 的问题是在一次调用后首先检查期望值,而不是正好是两次。实际上,在调用时,我们希望将 exactly 2 解释为最多两个,而在 verifyAll 中将其解释为恰好两个。

使用 Mock.Expectatmost 2 和/或效果后的普通旧验证,您可以更接近我认为您想要的现有实现的行为:

let [<Test>] ``expect method is called the specified number of times`` () =
// Arrange
let xs = Mock.Of<System.Collections.Generic.IList<int>>()
// Assert (setup)
Mock.Expect(<@ xs.Contains(0) @>, never)
Mock.Expect(<@ xs.Contains(1) @>, once)
Mock.Expect(<@ xs.Contains(2) @>, atmost 2)
// Act
xs.Contains(1) |> ignore
xs.Contains(2) |> ignore
xs.Contains(2) |> ignore
// Assert
Mock.Verify(<@ xs.Contains(2) @>, exactly 2)
verifyAll xs

感谢您报告问题。该问题现已在源代码中修复,并将在下一个版本中提供。

关于unit-testing - Foq Mock.Expect with Times > 1 总是失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21418522/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com