我使用FakeItEasy伪造一些实体框架调用,以确保一堆奇怪的遗留数据库表被正确地映射。
我需要断言,正在将具有与特定DeliveryAddress匹配的发票的客户添加到数据库中。
如果我这么做:
A.CallTo(() => db.Customers.Add(
    A<Customer>.That.Matches(
        c => c.Invoices.First().Address == EXPECTED_ADDRESS)
    )
)).MustHaveHappened();代码工作得很好。我想通过将期望转移到其他地方来简化语法,但是当我这样做时:
var expected = A<Customer>.That.Matches(
    c => c.Invoices.First().Address == EXPECTED_ADDRESS)
);
A.CallTo(() => db.Customers.Add(expected)).MustHaveHappened();测试失败了。在FakeItEasy代码中发生了什么,这意味着期望值表达式在内联时工作,但不能在变量中捕获并在以后重用?
发布于 2017-05-04 11:25:24
对于期望值表达式为什么内联地工作,不是一个直接的答案,但不是在一个变量中(我正在做这个工作,很快就会编辑答案!)
然而,我不是.That.Matches的粉丝
如果有一个以上的话,火柴可能会变得有点笨重。此外,如果任何匹配失败,MustHaveHappened调用将引发异常。让我不知道失败发生在哪里。
我更喜欢这样做:
Customer addedCustomer;
A.CallTo(() => a.Add(A<Customer>._))
    .Invokes(c => addedCustomer = c.GetArgument<Customer>(0));
//Individual Asserts on addedCustomer
Assert.AreEqual(EXPECTED_ADDRESS, addedCustomer.Invoices.First().Address);https://stackoverflow.com/questions/43781237
复制相似问题