本文总结java和android中单元测试,方便测试自己代码的正确性(主要是算法和一些逻辑的正确性),减少bug。
1、Java单元测试
1.1第一种方法
待测试类:
package com.yqq.test;
public class TestUnit {
public int add(int x,int y){
return x+y;
}
}
主要是测试add方法的正确性
需要导入包import org.junit.Test;
测试类代码:
package com.yqq.test;
import org.junit.Test;
public class MyTest {
@Test
public void testAdd(){
TestUnit testUnit=new TestUnit();
int reslut=testUnit.add(5, 5);
System.out.println(reslut);
}
}
测试结果:
出现绿条测试成功!!!测试方法必须是无参数的public void修饰。
1.2测试方法2
@BeforeClass 标注的方法在测试类的所有测试方法执行之前执行,主要用来初始化公用数据。
@AfterClass与 @BeforeClass 进行对应,做一些类级别的清理工作
它们所标注的类必须是public static void的无参方法。它们也可以被继承,并且在子类再注解方法时不会覆盖父类的方法
待测试类代码:
package com.yqq.test;
public class TestUnit {
private int a;
private int b;
public int add(){
return a+b;
}
/**
* @return the a
*/
public int getA() {
return a;
}
/**
* @param a the a to set
*/
public void setA(int a) {
this.a = a;
}
/**
* @return the b
*/
public int getB() {
return b;
}
/**
* @param b the b to set
*/
public void setB(int b) {
this.b = b;
}
}
测试类代码:
package com.yqq.test;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
public class MyTest {
private static TestUnit testUnit;
//初始化数据
@BeforeClass
public static void initArgs(){
testUnit=new TestUnit();
testUnit.setA(100);
testUnit.setB(200);
}
//清理工作
@AfterClass
public static void destroyArgs(){
testUnit.setA(-3);
testUnit.setB(-5);
int reslut=testUnit.add();
System.out.println(reslut);
}
@Test
public void testAdd(){
int reslut=testUnit.add();
System.out.println(reslut);
}
}
测试结果:
1.3测试方法3
测试类如2所示。
测试代码如下:
package com.yqq.test;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class MyTest {
private static TestUnit testUnit;
//初始化数据
@BeforeClass
public static void initArgs(){
testUnit=new TestUnit();
testUnit.setA(100);
testUnit.setB(200);
int reslut=testUnit.add();
System.out.println("BeforeClass"+reslut);
}
@Before
public void initArgsBefore(){
testUnit.setA(500);
testUnit.setB(100);
int reslut=testUnit.add();
System.out.println("Before"+reslut);
}
@After
public void initArgsAfter(){
testUnit.setA(600);
testUnit.setB(600);
int reslut=testUnit.add();
System.out.println("After"+reslut);
}
//清理工作
@AfterClass
public static void destroyArgs(){
testUnit.setA(-3);
testUnit.setB(-5);
int reslut=testUnit.add();
System.out.println("AfterClass"+reslut);
}
@Test
public void testAdd(){
int reslut=testUnit.add();
System.out.println("test"+reslut);
}
}
测试结果:
测试类执行顺序: @BeforeClass –> @Before –> @Test –> @After –> @AfterClass
测试方法执行顺序:
@Before –> @Test –> @After
如果有继承则各注解需要先执行父类的方法
2、android单元测试
2.1测试类继承AndroidTestCase
2.2在清单文件配置(测试类和目标包一致)
测试结果: