北京工作公司的单元测试原则

单元测试原则
所有Logic接口中所有的方法实现必须有单元测试,其他层中的方法暂时不做单元测试;
单元测试以“实现类名+Test”命名,使用测试接口的包名作为单元测试类的包名,如对于com.qusiness.logic.LoginLogic,测试类为com.qusiness.logic.LoginLogicTest;
单元测试放在项目的test源代码文件路径中;
单元测试中的每个方法为一个测试场景,按照“test+方法名+场景名”规则命名,例如testLoginNormal和testLoginException,分别对应正常场景和异常场景,正常场景名可以省略Normal,直接使用“test+方法名”,即testLogin;
每个接口中的方法中至少有一个正常测试场景,用来检查逻辑是否正常执行,必须用代码来实现“如果结果是正确的,我怎么能知道呢?”;
正常测试场景中必须包含对边界条件的测试,遵循CORRECT原则:
Conformance,一致性,检验输入数据是否符合期望的输入格式;
Order,顺序,输入的数据集合是否是期望的顺序;
Range,范围,输入的数据是否在一定的范围期间;
Reference,引用,该逻辑执行的前提条件。例如对于一个申请审批的逻辑approve(id)来说,虽然显式的参数只有一个审批流程ID,但实际上该逻辑执行的过程中引用了申请类的“状态”,所以必须对该状态进行检查。也就是说该逻辑的前提条件必须是对应的申请只有处于“已提交状态”。
Existence,存在性,是否允许为null或者0;
Cardinality,个数,输入的参数集合中元素的个数不同时执行结果,包括0、1或者多个;
Time,时间,对于非特殊方法,执行时间应该控制在1秒钟以内;
对于接口中显示声明了抛出异常的方法,对于每种异常必须都有一个测试场景,例如,对于 void login(name, password) throws InvalidAccountException, ExpiredAccountException;必须定义testLoginInvalidAccountException和testLoginExpiredAccountException两个测试场景,不允许以testLoginException一个场景中做两个场景的测试;
例子:
简单方法:参见base内部项目 com.qusiness.base.test. IFundAccountLogicTest
正常情况:参见base内部项目 com.qusiness.base.test.IRefundmentServiceTest
状态情况:参见base内部项目 com.qusiness.base.test. IOrderPublishServiceTest
边界情况:参见base内部项目 com.qusiness.base.test.IOrderPublishServiceTest
依赖情况:参见luc客户项目  com.qusiness.luc.test.SmsComandLogicTest

猜你喜欢

转载自googleyufei.iteye.com/blog/1123810