编写描述测试的名称

作者:Andrew Trenk

原文链接:http://googletesting.blogspot.tw/2014/10/testing-on-toilet-writing-descriptive.html


你需要多久才能从下面的代码中了解什么行为正在被测试?

@Test public void isUserLockedOut_invalidLogin() {
authenticator.authenticate(username, invalidPassword);
assertFalse(authenticator.isUserLockedOut(username));
authenticator.authenticate(username, invalidPassword);
assertFalse(authenticator.isUserLockedOut(username));
authenticator.authenticate(username, invalidPassword);
assertTrue(authenticator.isUserLockedOut(username));
}

你可能要通读每一行代码(或许不止一次)才能清楚每一行代码是做什么的。但是用这样的测试命名,让你了解被测行为要花多久?

isUserLockedOut_lockOutUserAfterThreeInvalidLoginAttempts

现在通过新的测试名称你应该就能很好的理解被测行为是什么,而且你甚至不用再去通读每一行的测试代码。上面的那个测试名的例子描述了一个测试场景(无效登录),但实际上它没有说明测试的预期结果是什么,因此你还是得通读一遍代码。

测试名称包含场景和预期结果还有很多好处:

-相比花上几分钟甚至几个小时去研读代码或者测试类,你只需通过测试名称就可以了解一个类中所有的测试行为。这一点在代码审查时,可以很快速地验证测试代码是否覆盖了所有预期的用例。

-通过给测试更清晰明确的命名,督促你为不同的行为设计独立的测试。否则你可能就会把不同行为添加到一个测试里来为它们添加断言,从长期来看,测试代码持续增长并且变得难以理解和维护。

-从测试代码来看某一测试行为可能并不总是那么清晰。如果这时候测试名称也不明确,那你可能要去猜这个测试到底要测什么。

-你可以很容易的判断哪些功能没有被测试到。如果你没有从测试名称中找到你要找的测试行为描述,那么明显它还不存在。

-         当一个测试失败时,你可以不用查看测试源代码就能迅速地定位哪一个功能出错了。

有很多组织测试名称的通用样式(有一个例子是在测试命名时在名称中添加"should",如:shouldLockOutUserAfterThreeInvalidLoginAttempts)。不论你选用什么样式,都建议你:确保测试名称包含测试场景和预期结果。

有时候,在测试中指定一个方法名就足够了,特别是函数方法简单的,那么通过名字就可以明显知道测试的行为。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值