单元测试
单元测试为什么不能有返回值和形参?
那表示你应该把“返回参数的方法A“和”A后面验证方法A返回值的方法B“的执行过程封闭成一个 test 方法。
一个 test case 是指”验证某个case是否正常“。复杂的多种情况应该分割成几个独立的 case 来测试。确保每个 case 都是原子性的 (Atomic)。如果你打算让一个 Case 中还讲究 if-else 来分别处理几种业务情况就表示你没理解单元测试的意思,你那样测试的不是”单元“而是”过程“。
而每个 JUnit test 方法应该是无状态的,无状态就是说,我们以任何次序和次数去调用某个方法,它给出的结果在参数相同的情况下结果应该完全相同,如果我们在测试过程中记住了某个”状态“变量再去按不同的次序调用几个方法时这几个方法可能分别影响了那个”状态“变量的值,这就导致调用的次序和次数的不同组合得到的结果不相同。比如 testA(), testB(), test(),我们以任何次序和次数的组合去调用这几个方法,对每个方法来说在参数相同时结果就应该相同,如果它们之间共享了”状态“就是错误的 Test Case 设计,因为我们这样是在测试”过程“而不是过程中的某个”单元“。这样一来对于以后经常改动代码的情况下我们只需要改完后再重新跑所有的 JUnit Test Case 来验证这次改动没有影响其它的功能。如果做不到这点就不是一个合格的 JUnit Test Case。
因为每次调用test方法,类都要重新加载,所以(静态或非静态)成员变量的上次调用测试方法设置的值是无法保存的。因此需要用到成员变量在测试方法中设置好的值,只能在测试方法的同一次调用中。