Junit4单元测试

匿名 (未验证) 提交于 2019-12-02 23:05:13

一、引入Junit4单元测试框架

   项目上单击右键->new->other->JUnit->Junit Test Case->Next->New Juint 4 test ->Name->setup->teardown->Class Under Test->Next->勾选你要测试的函数 ->Finish->提示引入JUnit库->Finish

二、简单的实例代码

1.被测试类:

 1 package com.zhang.java;  2   3 public class LoginSample {  4     public LoginSample() {        //构造方法  5         System.out.println("构造方法被调用!");  6     }  7   8     public boolean login(String ln, String pwd) {  9         if (ln != null && ln.length() > 2 && ln.length() < 17 && pwd != null && pwd.length() > 2 && pwd.length() < 17) { 10             if (ln.equals("zzp") && pwd.equals("123456")) { 11                 System.out.println("恭喜您,登录成功!"); 12                 return true; 13             } else { 14                 System.out.println("用户名或密码错误!"); 15             } 16         } else { 17             System.out.println("参数错误!"); 18         } 19         return false; 20     } 21  22 }

2、测试类代码:

 1 package com.zhang.java;  2   3 import static org.junit.Assert.*;  4   5 import org.junit.After;  6 import org.junit.AfterClass;  7 import org.junit.Before;  8 import org.junit.BeforeClass;  9 import org.junit.Test; 10  11 public class LoginSampleTest { 12  13     /** 14      * BeforeClass和Before做测试环境的初始化; 15      * AfterClass和After做数据的清理扫尾工作(如关闭数据库连接) 16      */ 17      18         private LoginSample login; 19      20     //在测试类执行之前执行的方法 21     @BeforeClass 22     public static void setUpBeforeClass() throws Exception { 23         System.out.println("@BeforeClass方法被执行"); 24     } 25  26     //在测试类执行之后执行的方法 27     @AfterClass 28     public static void tearDownAfterClass() throws Exception { 29         System.out.println("@AfterClass方法被执行"); 30     } 31  32     @Before 33     public void setUp() throws Exception { 34         System.out.println("@Before被调用%%%%%%%%%%%%"); 35         login = new LoginSample(); 36     } 37  38     @After 39     public void tearDown() throws Exception { 40         System.out.println("@After被调用&&&&&&&&&&&&&&&&&"); 41     } 42  43     //在一个测试类中可以有多个@test注解的测试方法 44     @Test 45     public void testLogin() { 46         System.out.println("testLogin()方法被调用"); 47 //        fail("Not yet implemented"); 48         boolean result = login.login("zzp", "123456"); 49         if(result) 50             System.out.println("测试通过!"); 51         else 52             fail("测试失败!");    //用到测试框架的断言fail()方法 53          54         System.out.println("==========="); 55     } 56  57 }

测试类运行结果:

@BeforeClass方法被执行 @Before被调用%%%%%%%%%%%% 构造方法被调用! testLogin()方法被调用 恭喜您,登录成功! 测试通过! =========== @After被调用&&&&&&&&&&&&&&&&& @AfterClass方法被执行

三、补充说明

@RunWith(Parameterized.class):注解JUnit测试类,指定该测试类使用参数化方式运行,要写在测试类外面(不是类里面);

@Parameters:生成并返回测试数据,一般使用Object[][]二位数组来接收数据返回。该方法必须是静态方法,因为要在测试方法运行之前生成测试数据。

2、相关方法:

  在JUnit参数化的类中,需要有一个构造方法,用于存储和传递测试数据。 由@Parameters注解的静态方法,是一个Collection或者Iterator,生成并返回测试数据。

   构造方法需要用对应的参数列表接收数据。 这样,数据将被传递到@Test注解的测试方法,逐条进行测试,直到集合中不再有元素为止。

3、代码展示

a、被测试类代码

 1 package com.zhang.java;  2   3 public class Plus {  4       5     public int Sum(int x, int y) {  6         int result=x+y;  7         return result;  8     }  9      10 }

b、单元测试用例代码

 1 package com.zhang.java;  2   3 import static org.junit.Assert.*;  4 import org.junit.Before;  5 import org.junit.Test;  6 import org.junit.runner.RunWith;  7 import org.junit.runners.Parameterized;  8 import org.junit.runners.Parameterized.Parameters;  9  10 //写在测试类前,表示该测试类用参数化形式运行。 11 @RunWith(Parameterized.class) 12 public class PlusTest { 13      14   //用成员变量接收来自parameter方法生成的数据 15     //测试名 16     public String caseName; 17     //测试预期结果 18     public String exResult; 19     //测试用到的数据 20     public int firstNum; 21     public int secondNum; 22     private Plus p; 23      24     //测试前的准备,初始化被测试类。 25     @Before 26     public void setUp() throws Exception { 27         p=new Plus(); 28     } 29      30     //构造函数用于接收数据parameter的数据,并给成员变量赋值。 31     public PlusTest(String input1,String input2,int input3 ,int input4) { 32         caseName=input1; 33         exResult=input2; 34         firstNum=input3; 35         secondNum=input4; 36     } 37      38     @Parameters(name="{0},res:{1},operater:sum({2}+{3})") 39     public static Object[][] setData(){ 40         return new Object[][] { 41             {"左边界-1","-2147483649",-2147483648,-1},          //Object[0][] 42             {"左边界+0","-2147483648",-2147483648,0},           //Object[1][] 43             {"左边界+1","-2147483647",-2147483648,1}            //Object[2][] 44         }; 45     } 46      47     //每一条数据都会用于执行一次@Test测试方法    48     @Test 49     public void testSumIntInt() { 50         System.out.println(caseName); 51         //用到的方法: 52         //void org.junit.Assert.assertEquals(String message, Object expected, Object actual) 53         assertEquals(caseName,exResult, Integer.toString(p.Sum(firstNum, secondNum))); 54     } 55  56 }

运行后的结果

左边界-1 左边界+0 左边界+1

五、TestSuite测试套件

创建方法:

  在包含JUnit4 case的包中右键->new->other->JUnit->Junit Test Suite>Next ->New JUnit4 Suite->Name->选择你需要执行的Case->Finish。

添加case:

  在@SuiteClasses注解中指定要执行的case,以classname.class的形式添加,如下:

  @SuiteClasses({ JUnit4.class })

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!