在平时的开发当中,一个项目往往包含了大量的方法。如何去保证这些方法产生的结果是我们想要的呢?我们最容易想到的一个方式,就是我们通过
System.out来输出我们的结果,看看是不是满足我们的需求,但是项目中存在多个方法,我们总不能在每一个方法中都去输出一遍。这时候用单元测试框架junit就可以很好地解决这个问题。
junit内部提供了一个断言机制,它能够将我们预期的结果和实际的结果进行比对,判断出是否满足我们的期望。
假如我们要对加减乘除法进行验证。
public class Calculate{
public int add(int a,int b){
return a + b;
}
public int subtract(int a,int b){
return a - b;
}
public int multiply(int a,int b){
return a * b;
}
public int divide(int a,int b){
return a / b;
}
}
使用junit去测试。
public class CalculateTest{
@Test
public void testAdd(){
assertEquals(3,new Calculate().add(1,2));
}
@Test
public void testSubtract(){
assertEquals(8,new Calculate().add(10,2));
}
@Test
public void testMultiply(){
assertEquals(2,new Calculate().add(1,2));
}
@Test
public void testDivide(){
assertEquals(5,new Calculate().add(10,2));
}
}
遵循如下规则:
①每一个测试方法使用@Test进行修饰(表明这是一个测试方法)
②每一个测试方法使用public void进行修饰
③每一个测试方法不能携带参数
④测试代码和源代码是在不同的项目路径下
⑤测试类的包与被测试类的保持一致
⑥测试单元的每个方法可以独立测试
assertEquals是一个断言规则,里面有两个参数,第一个是表明预期值,第二个是表明实际值。运行测试类,就会运行每一个方法,也可以选择其中一个运行,只需要在相应的测试方法上面右键运行即可,运行成功不会出现错误信息,否则错误。
单元测试不是银弹,它不能帮助我们搞定所有问题。比如缓存(passwordFailedService)、数据库(accountService)和日志(logService)的实际处理情况,它都是无能为力的。这些都需要在集成测试中去验证,两者结合才能确保整个方法的逻辑链路正确无误。单元测试更重要的是做到了对自己的代码负责,并且这些测试用例可以更容易的帮助别人理解自己的代码。