- 一次只测试一个对象
——当一个对象与其他对象交互时,应该用可预测的测试对象将被测试对象(领域对象)包围起来
- 选择有意义的测试方法名字
——看见方法名字便知用来测试什么的
——testXXXYYY的命名模式,XXX为待测试领域方法的名字,YYY说明测试之间的不同
- 在assert调用中解释失败的原因
——使用JUnit的assert*方法,它的第一个参数最好是String类型的,这样可以提供有意义的文本描述
- 一个单元测试等于一个@Test方法
——将多个测试塞进一个方法中,不但难以阅读,测试失败的可能性也会加大,导致进行调试的可能性同时也会加大
——多个单元测试在一个方法中,会难以定位问题的位置
——测试方法中必须包含assert语句,不然会出现测试成功的假象。【当抛出异常来指出错误条件时,可以不使用assert语句】
- 测试任何可能失败的事物
——若方法以任何方式改变了参数值或字段值,应该为这个方法增加测试
通过测试改善代码
----一个测试用例相当于一位代码用户<br /> ----一种识别异常路径的简单方法是检查待测代码中的不同路径
使异常测试更易于阅读
——@Test注释的expected参数会明确告知开发者,该测试方法会产生什么类型的异常
为跳过测试说明原因
----向跳过测试说明原因,可以向其他开发人员说明你为什么跳过测试的执行,也证实自己知道该测试是干什么的
相同的包,分离的目录
——采用平行目录结构,把所有测试类和待测试类都放在同一个包中
测试类的存放:
- 把测试类作为包package中的共有类
- 作为测试用例类的内部类(适用简单且以后不会有很大改动的测试类)
- 等等(待补充)
创建测试的模式:
- 通过把环境设置成已知状态(如创建对象,获取资源)来创建测试。测试前的状态称为 Test Fixture
- 调用待测试的方法
- 确认测试结果,通常通过调用一个或更多的assert方法来实现
分离初始化逻辑
当多个测试方法的初始化行为是一样的时候,为了减少重复的代码,可以将相同的变量初始化行为放置在@Before注释的方法中
