我有以下测试:
[Test]
public void VerifyThat_WhenProvidingAServiceOrderWithALinkedAccountGetSerivceProcessWithStatusReasonOfEndOfEntitlementToUpdateStatusAndStopReasonForAccountGetServiceProcessesAndServiceOrders_TheProcessIsUpdatedWithAStatusReasonOfEndOfEntitlement()
{
IFixture fixture = new Fixture()
.Customize(new AutoMoqCustomization());
Mock<ICrmService> crmService = new Mock<ICrmService>();
fixture.Inject(crmService);
var followupHandler = fixture.CreateAnonymous<FollowupForEndOfEntitlementHandler>();
var accountGetService = fixture.Build<EndOfEntitlementAccountGetService>()
.With(handler => handler.ServiceOrders, new HashedSet<EndOfEntitlementServiceOrder>
{
{
fixture.Build<EndOfEntitlementServiceOrder>()
.With(order => order.AccountGetServiceProcess, fixture.Build<EndOfEntitlementAccountGetServiceProcess>()
.With(process => process.StatusReason, fixture.Build<StatusReason>()
.With(statusReason=> statusReason.Id == MashlatReasonStatus.Worthiness)
.CreateAnonymous())
.CreateAnonymous())
.CreateAnonymous()
}
})
.CreateAnonymous();
followupHandler.UpdateStatusAndStopReasonForAccountGetServiceProcessesAndServiceOrders(accountGetService);
crmService.Verify(svc => svc.Update(It.IsAny<DynamicEntity>()), Times.Never());
}
我的问题是它在第一次运行时永远不会失败,就像TDD指定的那样 应该测试的是,只要服务订单处理的状态存在特定值,就不执行更新 这个测试是否检查它应该是什么?
答案 0 :(得分:1)
我在这里努力理解这个问题......
这个测试在第一次尝试时是否通过了你的问题? 如果是,则表示两件事之一
由于第一个已被排除,绿色是。关闭你去列表中的下一个..
在我假设的某个地方,您将实现更多功能,从而导致调用预期的方法。即,当状态值不同时,执行更新。 该测试的修复必须确保两个测试都通过。
如果不是,请向我提供更多信息以帮助我理解。
答案 1 :(得分:1)
遵循TDD方法,我们只为不存在的功能编写新的测试。如果测试在第一次运行时通过,则了解原因非常重要。
关于TDD,我最喜欢的一件事就是它能够挑战我们的假设,并且让我们的自我平稳。 "Calling your Shots"的实践不仅是通过测试的好方法,而且也很有趣。当我希望它能够通过测试失败时我喜欢 - 许多很好的学习机会来自于此;一次又一次,工作软件的证据胜过开发者自我。
当我认为不应该通过测试时,下一步是使其失败。
例如,如果实现被注释掉,那么期望不会发生的事情的测试将保证通过。通过注释或改变实施条件来篡改您认为正在实施的逻辑,并验证您是否得到相同的结果。
如果在执行此操作后,您确信功能正确,请编写另一个证明相反的测试。是否会使用不同的状态或输入调用更新?
有了这两个设置,您应该能够注释掉该功能,并且能够提前知道哪个测试会受到影响。 (8球,角落口袋)
我还建议你在上面的测试中添加另一个断言,以确保实际调用被测试的主题和功能。
答案 2 :(得分:0)
将Times.Never()更改为Times.AtLeastOnce()并为tdd提供了良好的开端。
尽量找不到任何东西,这是一个很好的测试,但不是他们开始tdd的方式,首先使用简单的规范,用户可以做的天真操作(当然,从你的观点来看)。
当你完成一些工作时,请在以后失败时保留它。