JUnit小记
一、参数测试
/** * 1、更改测试运行器为RunWith(Parameterized.class) * 2、声明变量用来存放预期值与结果值 * 3、为测试类声明一个带有参数的公共构造方法,并在其中为声明变量赋值 * 4、声明一个返回值为Collection的公共静态方法,并使用@Parameters进行修饰。数组里就是你要测试的参数。 */ 具体步骤: 1、引入包 import org.junit.runners.Parameterized.Parameters; 2、在类上 加 @RunWith 注释,指定该测试类 和 Parameterized 类一起运行。 @RunWith(Parameterized.class) public class abc{...} 3、 声明变量用来存放预期值与结果值,创建一个持有这些参数类型的构造函数,并关联; String p1; boolean p2; public abc(String p1, boolean p2){ this.p1=p1; this.p2=p2; } 4、创建一个返回 Collection 类型的 static 方法,并用 @Parameter 注释加以修饰。 @Parameters public static Collection parametersValues() { return Arrays.asList(new Object[][] { {"A", true }, {"BB", false }, {"CCC", true }, {"DDDD", false }}); } 5、创建通用测试。 @Test public void goTest(){ System.out.println( p1 + " --- " + p2 ); }
二、测试套件
如果要同时测试多个类,可以新增一个测试套件,将多个所有测试类包含进去,每次执行测试套件类的时候,就会把包含的测试类全都执行一遍。
import org.junit.runner.RunWith; import org.junit.runners.Suite; /*如果要同时测试多个类, 可以新增一个测试套件, 将多个所有测试类包含进去, 每次执行测试套件类的时候, 就会把包含的测试类全都执行一遍 * * 使用 @RunWith注解,更改测试运行器为Suite.class,将要测试的类作为数组传入到Suite.SuiteClasses({})中, * * 测试套件类不能包含其他测试方法 * * 测试套件也可以包含其他的测试套件,具体用法和包含多个测试类是一样的 * */ @RunWith(Suite.class) @Suite.SuiteClasses({ JunitTest.class, RegularExpressionJUnit4Test.class}) public class SuiteTest { //类空着 }
三、注意事项
测试方法必须使用public void进行修饰,不能带参数 一般使用单元测试会新建一个test目录存放测试代码,在生产部署的时候只需要将test目录下代码删除即可 测试代码的包应该和被测试代码包结构保持一致 测试单元中的每个方法必须可以独立测试,方法间不能有任何依赖 测试失败说明: Failure:一般是由于测试结果和预期结果不一致引发的,表示测试的这个点发现了问题 error:是由代码异常引起的,它可以产生于测试代码本身的错误,也可以是被测试代码中隐藏的bug 一些常用注解: @Test(excepted=xx.class): xx.class表示异常类,表示测试的方法抛出此异常时,认为是正常的测试通过的 @Test(timeout=毫秒数) :测试方法执行时间是否符合预期 @BeforeClass: 会在所有的方法执行前被执行,static方法 @AfterClass:会在所有的方法执行之后进行执行,static方法 @Before:会在每一个测试方法被运行前执行一次 @After:会在每一个测试方法运行后被执行一次 @Ignore:所修饰的测试方法会被测试运行器忽略 @RunWith:可以更改测试运行器org.junit.runner.Runner @Parameters:参数化注解
四、断言方法
void assertEquals([String message], expected value, actual value) 断言两个值相等。值可能是类型有 int, short, long, byte, char or java.lang.Object. 第一个参数是一个可选的字符串消息 void assertTrue([String message], boolean condition) 断言一个条件为真 void assertFalse([String message],boolean condition) 断言一个条件为假 void assertNotNull([String message], java.lang.Object object) 断言一个对象不为空(null) void assertNull([String message], java.lang.Object object) 断言一个对象为空(null) void assertSame([String message], java.lang.Object expected, java.lang.Object actual) 断言,两个对象引用相同的对象 void assertNotSame([String message], java.lang.Object unexpected, java.lang.Object actual) 断言,两个对象不是引用同一个对象 void assertArrayEquals([String message], expectedArray, resultArray) 断言预期数组和结果数组相等。数组的类型可能是 int, long, short, char, byte or java.lang.Object.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
结语:我只想把我所知道的,尽量简洁清楚地表达出来。
结语:我只想把我所知道的,尽量简洁清楚地表达出来。