如何在BDD / TDD中表示动作的结果

时间:2009-08-11 00:02:47

标签: unit-testing testing tdd naming bdd

标题可能不太清楚。我记得以下例子:

Authenticator对象使用凭据对用户进行身份验证。它返回一个AuthResult对象。此AuthResult对象表示身份验证成功,或者失败(如果是,为什么失败,例如用户名未找到)。

我怎样才能在测试中说出这个? 'testShouldReturnAuthObjectWithStatusSuccessOnValidLogin'?

2 个答案:

答案 0 :(得分:5)

testValidLoginIsSuccessful testIsSuccessfulOnValidLogin 对我来说似乎已经足够了。

对于错误测试,您可以使用类似 testGetsCustomMessageOnUserNotFound

的内容

您应该避免将实现细节放在方法名称中。

答案 1 :(得分:2)

在没有看到如何实施这些测试的情况下,从命名看来,观察结果是过度的。

如果此测试失败,您将不得不进行一些挖掘以了解它是否是因为(a)没有返回AuthResult对象,或者(b)状态不是“成功”,而且,是否没有AuthResult因为Authenticator从未连接到数据库或执行其他必要的操作?

我将夹具命名为When_told_to_authenticate_with_valid_credentials,然后将断言分成两个不同的观察点:
1. should_return_an_AuthResult
2. should_be_successful

如果你像Samuel正确建议的那样嘲笑那些其他课程,你可以进一步规定认证者的行为符合你的期望:
3. should_connect_to_the_database
4. 等。