1700453186
编写高质量代码:改善Java程序的151个建议 建议145:不要完全依靠单元测试来发现问题
1700453187
1700453188
单元测试的目的是保证各个独立分割的程序单元的正确性,虽然它能够发现程序中存在的问题(或缺陷,或错误),但是单元测试只是排查程序错误的一种方式,不能保证代码中的所有错误都能被单元测试挖掘出来,原因有以下四点。
1700453189
1700453190
(1)单元测试不可能测试所有的场景(路径)
1700453191
1700453192
单元测试必须测试的三种数据场景是:正常场景、边界场景、异常场景。一般情况下,如果这三种测试场景都能出现预期的结果,则认为代码正确,但问题是代码是人类思维的直观表达,要想完整地测试它就必须写出比生产代码多得多的测试代码,例如有这样一个类:
1700453193
1700453194
public class Foo{
1700453195
1700453196
//除法计算
1700453197
1700453198
public int divid(int a, int b){
1700453199
1700453200
return a/b;
1700453201
1700453202
}
1700453203
1700453204
}
1700453205
1700453206
就这一个简单的除法计算,如果我们要进行完整的测试就必须建立三个不同的测试场景:正常数据场景,用来测试代码的主逻辑;边界数据场景,用来测试代码(或数据)在边界的情况下逻辑是否正确;异常数据场景,用来测试出现异常非故障时能否按照预期运行,测试类如下:
1700453207
1700453208
public class FooTest{
1700453209
1700453210
//构建测试对象
1700453211
1700453212
private Foo foo=new Foo();
1700453213
1700453214
//正常测试场景
1700453215
1700453216
@Test
1700453217
1700453218
public void testDividNormal(){
1700453219
1700453220
//断言100除以10的结果为10
1700453221
1700453222
assertEquals(10,foo.divid(100,10));
1700453223
1700453224
}
1700453225
1700453226
//边界测试场景
1700453227
1700453228
@Test
1700453229
1700453230
public void testDividBroader(){
1700453231
1700453232
//断言最大值除以最小值结果为0
1700453233
1700453234
assertEquals(0,foo.divid(Integer.MAX_VALUE, Integer.MIN_VALUE));
[
上一页 ]
[ :1.700453185e+09 ]
[
下一页 ]