单元测试技巧:创建描述性测试

您的单元测试应尽可能具有描述性。 他们给您的反馈应该非常清楚,您甚至不需要启动调试器并一步一步地检查代码来检查局部变量。 为什么? 因为那需要时间,而且我们很懒,对吗? 为此,您需要创建描述性测试。 有多种实现方法。 这是其中两个。

添加断言消息

通常可以将断言消息指定为测试断言中的附加参数,并且在该特定测试用例失败时,它们会作为失败消息出现。

例如,在jUnit中,您可以指定断言消息,例如:

assertEquals("The firstname of the two people should match if the clone was successful", "Fritz", person1.getFirstname());

另一方面,在MSTest中,必须将断言消息作为最后一个参数添加。

Assert.AreEqual("Fritz", person1.Firstname, "The firstname of the two people should match if the clone was successful");

注意 ,不要“过度设计”。 我将这些注释与其他代码注释类似地对待:如果它们添加了有意义的信息,则只需添加它们即可。 否则,它们就是浪费,因此就这样对待它们。

首选显式断言

所说的显式断言的意思是对执行的操作使用正确的断言。 例如,如果您需要像前面提到的断言中那样执行相等性检查,请不要使用布尔断言语句。 (这里是一个虚拟的QUnit测试用例的示例)

test('Should correctly clone two people', 1, function(){
    //...

    ok(person1.firstname === 'Fritz', 'I expect both names to match if the clone operation succeeded');
});

…以及相应的结果在输出窗口中:

这个结果并不是真正的描述性...

这个结果并不是真正的描述性…

结果没有告诉我们太多,对吧? 您可以说的是,此人的名字与您期望的名字不匹配,因此克隆操作可能不会成功。 但为什么?? 那它的实际价值是多少?

使用equals代替:

test('Should correctly clone two people', 1, function(){
    //...

    equal(person1.firstname, 'Fritz', 'I expect both names to match if the clone operation succeeded');
});

……结果又是:

哦,看那里,有描述性的结果。

哦,看那里,有描述性的结果。

现在,此测试用例的结果更具描述性。 它不仅告诉您操作失败,而且还准确地向您显示了预期值和实际值。 这可能会立即提示您可能存在问题的地方。

参考: 单元测试提示:Juri Strumpflohner的TechBlog博客上,由我们的JCG合作伙伴 Juri Strumpflohner 创建描述性测试

翻译自: https://www.javacodegeeks.com/2013/06/unit-testing-tip-create-descriptive-tests.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值