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.
原文地址:https://www.cnblogs.com/dacude/p/7712918.html