在我的单元测试中使用FakeItEasy时,我遇到了一个超级奇怪的问题......
我断言是否已对模拟进行调用,并且我在方法的某个参数上指定了约束,如:
Dim pattern As String = "^(?:[^\s]+\s){7}([^\s]+)"
Dim input As String = "Invoice CO1234 1234567890 06.01.2016 06.01.2016 USD 6.72 1 1"
Dim match As Match = Regex.Match(input, pattern)
console.WriteLine(match.Groups(1).Value)
问题是这个断言失败有时。我注意到,当我在一次运行中运行所有测试(“全部运行”)时通常会失败,但如果我只运行此特定A.CallTo(() => fakeStorageClient.StoreAsync("commands", A<CommandEnvelope<FakeCommand>>.Ignored, false)).MustHaveHappened(Repeated.Exactly.Once);
则不会。正如您所注意到的,该方法为Fact
,因此我在考虑一些与异步相关的问题,但所有调用都已正确async
。
查看断言失败的详细信息,日志为:
await
如您所见,预期的呼叫确实发生了(情况是#2),但出于某种原因,FakeItEasy期待以 NULL 作为第二个参数进行呼叫!
我希望有人可以帮我弄清楚为什么FakeItEasy会将Assertion failed for the following call:
Backend.Data.MessageStorage.IMessageStorageClient.StoreAsync("commands", <NULL>, False)
Expected to find it exactly once but found it #0 times among the calls:
1: Backend.Data.MessageStorage.IMessageStorageClient.StoreAsync(
tableName: "commandStream",
entity: Backend.Domain.Commands.CommandEnvelope`1[Backend.Domain.Tests.FakeCommand],
streamMode: True)
2: Backend.Data.MessageStorage.IMessageStorageClient.StoreAsync(
tableName: "commands",
entity: Backend.Domain.Commands.CommandEnvelope`1[Backend.Domain.Tests.FakeCommand],
streamMode: False)
约束评估为NULL,而且,为什么它只会有时 ...
答案 0 :(得分:1)
问题证明是issue 476的一种表现形式,已在最新的FakeItEasy 2.0.0版本候选版本中得到修复。升级到该版本修复了它,因为我希望单线程运行测试可以。