• 一次只测试一个对象

    ——当一个对象与其他对象交互时,应该用可预测的测试对象将被测试对象(领域对象)包围起来

    • 选择有意义的测试方法名字

    ——看见方法名字便知用来测试什么的
    ——testXXXYYY的命名模式,XXX为待测试领域方法的名字,YYY说明测试之间的不同

    • 在assert调用中解释失败的原因

    ——使用JUnit的assert*方法,它的第一个参数最好是String类型的,这样可以提供有意义的文本描述

    • 一个单元测试等于一个@Test方法

    ——将多个测试塞进一个方法中,不但难以阅读,测试失败的可能性也会加大,导致进行调试的可能性同时也会加大
    ——多个单元测试在一个方法中,会难以定位问题的位置
    ——测试方法中必须包含assert语句,不然会出现测试成功的假象。【当抛出异常来指出错误条件时,可以不使用assert语句】

    • 测试任何可能失败的事物

    ——若方法以任何方式改变了参数值或字段值,应该为这个方法增加测试

    • 通过测试改善代码

      1. ----一个测试用例相当于一位代码用户<br /> ----一种识别异常路径的简单方法是检查待测代码中的不同路径
    • 使异常测试更易于阅读

    ——@Test注释的expected参数会明确告知开发者,该测试方法会产生什么类型的异常

    • 为跳过测试说明原因

      1. ----向跳过测试说明原因,可以向其他开发人员说明你为什么跳过测试的执行,也证实自己知道该测试是干什么的
    • 相同的包,分离的目录

    ——采用平行目录结构,把所有测试类和待测试类都放在同一个包中

    测试类的存放:

    • 把测试类作为包package中的共有类
    • 作为测试用例类的内部类(适用简单且以后不会有很大改动的测试类)
    • 等等(待补充)

    创建测试的模式:

    1. 通过把环境设置成已知状态(如创建对象,获取资源)来创建测试。测试前的状态称为 Test Fixture
    2. 调用待测试的方法
    3. 确认测试结果,通常通过调用一个或更多的assert方法来实现

    分离初始化逻辑
    当多个测试方法的初始化行为是一样的时候,为了减少重复的代码,可以将相同的变量初始化行为放置在@Before注释的方法中