发表于: 2018-03-26 22:33:12
1 510
小白学java第十三天,今天学习时间比较短,但是浓缩就是精华,今天还是学点内容比较多的。
今天完成的事情:今天先对昨天的内容进行了巩固,全部重过了一遍,然后闭上眼睛回忆了一遍。然后进行了JUnit的学习。
JUnit和主方法测试相比有什么优点
1.实际进行开发时,我们会编写大量的函数,采用主方法测试需要编写大量的代码,而且还需要对测试的结果逐个检查,工作量非常大。使用Junit4进行测试可以一次进行多种测试,只要查看结果bar是不是绿色的就行。当bar为红色时,根据Failure Trace可以快速定位问题,方便修改。
2.进行单元测试可以减少后期维护成本。
注解有哪些、怎么使用的
常用的注解有:
@Test 表示测试方法
@Ignore 用于写好接口,实现类还没有完成的情况。执行单元测试时,会跳过这一方法
@Before 每一个@Test执行前都会执行一次的功能,例如获取数据库连接
@After 每一个@Test执行完毕后都会执行一次的功能,例如关闭数据库连接
了解测试类编写规范
1.命名规范 测试单元类名一般为"源文件类名+Test"
测试方法名一般为"test+源文件方法名"
2.方法前要使用标注 在测试类中并不是每一个类都是用来调试的,要用标注来标明
3.测试方法返回类型为void
4.测试方法不带变量
代码:
package test;
public class Calculator {
private static int result; // 静态变量,用于存储运行结果
public void add(int n) {
result = result + n;
}
public void substract(int n) {
result = result - 1; //Bug: 正确的应该是 result =result-n
}
public void multiply(int n) {
} // 此方法尚未写好
public void divide(int n) {
result = result / n;
}
public void square(int n) {
result = n * n;
}
public void squareRoot(int n) {
for (; ;) ; //Bug : 死循环
}
public void clear() { // 将结果清零
result = 0;
}
public int getResult() {
return result;
}
}
测试类
package test;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
public class CalculatorTest {
private static Calculator calculator = new Calculator();
@Before
public void setUp() throws Exception {
calculator.clear();
}
@Test
public void testAdd() {
calculator.add(2);
calculator.add(3);
assertEquals(5, calculator.getResult());
}
@Test
public void testSubstract() {
calculator.add(10);
calculator.substract(2);
assertEquals(8, calculator.getResult());
}
@Ignore("Multiply() Not yet implemented")
@Test
public void testMultiply() {
}
@Test
public void testDivide() {
calculator.add(8);
calculator.divide(2);
assertEquals(4, calculator.getResult());
}
}
两个是成功一个失败一个无效。
package test1;
import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.Test;
import test.Calculator;
public class Calculatortest {
private static Calculator calculator = new Calculator();
@Before
public void clearCalculator(){
calculator.clear();
}
@Test
public void square1() {
calculator.square(2);
assertEquals(4, calculator.getResult());
}
@Test
public void square2(){
calculator.square(0);
assertEquals(0, calculator.getResult());
}
@Test
public void square3(){
calculator.square(-3);
assertEquals(9, calculator.getResult());
}
}
例二:
package test2;
/**
* 被测试类,通过Junit对此类的方法进行单元测试
*/
public class Claculate1 {
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;
}
}
测试类
package test2;
import static org.junit.Assert.*;
import org.junit.Test;
/**
* junit的测试方法必须使用@Test注解
* 测试方法必须以public void修饰,并且不包含参数
*/
public class Claculate1Test {
@Test
public void testAdd() {
/**
* assertEquals这个方法是一个断言方法
* 第一个参数表示预期的结果
* 第二个参数表示程序的执行结果
* 当预期结果与执行结果是一致的时候,则表示单元测试成功
*/
assertEquals(4, new Claculate1().add(1, 3));
}
@Test
public void testSubtract() {
assertEquals(4, new Claculate1().subtract(9, 5));
}
@Test
public void testMultiply() {
assertEquals(6, new Claculate1().multiply(2, 3));
}
@Test(expected=ArithmeticException.class)
public void testDivide() {
assertEquals(3, new Claculate1().divide(9, 0));
}
}
明天计划的事情:(继续复习巩固昨天的内容,完成jdbcTemplate,并加深理解,尝试自己写一个)
遇到的问题:(这个单元测试是测试程序吗,测试代码对错还是什么,不是很能搞懂)
收获:(通过今天的学习,今天认识并学到了JUnit,并做了巩固联系)
劳烦师兄批阅
评论