【发布时间】:2014-01-28 22:44:34
【问题描述】:
我发现的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
【问题讨论】:
-
不要在新代码中这样做(期望在测试开始和断言部分中的
verifyAll)! stackoverflow.com/questions/980554/… -
我也不喜欢 expect/verifyAll 样式,但如果它在 Foq 中,它应该可以工作 - 除非我误解了它的工作原理。
-
如果您将
Expects 移至Assert阶段,一切都很好。 (例外是从 Act 阶段产生的(如果期望不是once/atleastonce,第一个触发会导致它爆炸) -
我同意应该可以使它可行;我个人的经验是,Foq Just Works(而且你也从 Phillip Trelford 那里得到了极大的响应!)。我会在示例和/或源代码中进行搜索。但问题仍然存在:- 你在做什么,必须以这种方式表达 - 我还没有遇到过这种方法有用的案例
-
如果您将
Expects 移至// Assert阶段,一切都很好。 (例外来自// Act阶段(如果期望不是once/atleastonce,第一次触发会导致它爆炸)
标签: unit-testing f# foq