博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JUnit 详解
阅读量:2393 次
发布时间:2019-05-10

本文共 5233 字,大约阅读时间需要 17 分钟。

添加的包:hamcrest-core.jar  
                  hamcrest-library.jar  
                  junit.jar

注:一般不使用 MyEclipse 自带的JUnit的方法

JUnit的各种断言
JUnit 
提供了一些辅助函数,用于帮助你确定某个被测试函数是否工作正常。通常而言,把所有这些函数统称为断言。断言是单元测试最基本的组成部分。
1> assertEquals([String message], expected,actual):
比较两个基本类型或对象是否相等(
expected
actual
是原始类型数值
(primitive value)
或者必须为实现比较而具有
equal
方法)

2> assertFalse([String message],boolean condition):
对布尔值求值,看它是否为

3> assertTrue([String message],boolean condition):
对布尔值求值,看它是否为

4> assertNull([String message],java.lang.Object object):
检查对象是否为

5> assertNotNull([String message],java.lang.Object object):
检查对象是否不为

6> assertSame([String message],expected,actual):
检查两个对象是否为同一实例

7> assertNotSame([String message],expected,actual):
检查两个对象是否不为同一实例

8> fail( String message ):
使测试立即失败,其中
 message 
参数使可选的。这种断言通常被用于标记某个不应该到达的分支(例如,在一个预期发生的异常之后)

JUnit和异常
对于测试而言,下面两种异常是我们可能会感兴趣的:
1>
 
从测试代码抛出的可预测异常
2
>
 
由于某个模块(或代码)发生严重错误,而抛出的不可预测异常
任何对 
assertTrue(true) 
的使用都应该被翻译为“我预期控制流程会达到这个地方”。通常而言,对于方法中每个被期望的异常,你都应该写一个专门的测试来确认该方法在应该抛出异常的时候确实会抛出异常。如上例中
testEmpty()
测试方法的设计。
对于处于出乎意料的异常,你最好简单的改变你的测试方法的声明让它能抛出可能的异常。
JUnit
框架可以捕获任何异常,并且把它报告为一个错误,这些都不需要你的参与。


测试类
import static org.junit.Assert.*;
import static org.hamcrest.Matchers.*;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import com.chenshun.unit.T;

 /*
  * 每一个测试函数运行前 都回执行@Before对应的函数
  * 每一个测试函数运行后 都回执行@After对应的函数
  *
  * 你要在方法的前面使用@Test标注,以表明这是一个测试方法。对于方法的声明也有如下要求:名字可以随便取
  * ,没有任何限制,但是返回值必须为void,而且不能有任何参数。如果违反这些规定,会在运行时抛出一个异常。
  * 至于方法内该写些什么,那就要看你需要测试些什么了
  */
public class T_Test {

 //在任何方法运行前运行一次该方法
 @BeforeClass
 public static void beforeclass(){
    System.out.println("BeforeClass");
 }
 
//在任何方法运行后运行一次该方法

 @AfterClass
 public static void afterclass(){
    System.out.println("AfterClass");
 }
 
 
//初始化时进行的操作
 @Before
 public void before(){
     System.out.println("before");
 }
 
 
//测试结束时进行的操作
 @After
 public void after(){
     System.out.println("after");
 }
 
//忽略测试方法

 @Ignore
 public void testT(){
    int a;
 }
 
 
//@Test表示其下方方法是一个测试方法

 @Test
 public void testAdd() {
    int z = new T().add(1 , 2);
    System.out.println("z = " + z);
    assertEquals(z , 3);//判断是否相等
    assertThat(z , is(3));//判断是否相等
    assertThat(z , allOf(greaterThan(2), lessThan(4)));//判断在不在指定范围里
  }
 
 
// timeout:测试方法最大执行时间(毫秒)
 @Test(expected=java.lang.ArithmeticException.class, timeout= 100)
  public void testDivide(){
     int z = new T().divide(8, 0);
  }
 
}


目标类
public class T {
 public int add(int x, int y){
  return x + y;
 }
 
 public int divide(int x,int y){
  return x / y;
 }
}

对于测试Spring
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import chenshun.model.ProCategory;
import chenshun.service.ProCategoryI;

 
/*
  *每一个测试函数运行前 都回执行@Before对应的函数
  *每一个测试函数运行后 都回执行@After对应的函数
  *
  *你要在方法的前面使用@Test标注,以表明这是一个测试方法。对于方法的声明也有如下要求:名字可以随便取
  *,没有任何限制,但是返回值必须为void,而且不能有任何参数。如果违反这些规定,会在运行时抛出一个异常。
  *至于方法内该写些什么,那就要看你需要测试些什么了
  */
public class TestMyBatis {

 
//在任何方法运行前运行一次该方法
 @BeforeClass
 public static void beforeclass(){
     System.out.println("BeforeClass");
 }
 
 
//在任何方法运行后运行一次该方法

 @AfterClass
 public static void afterclass(){
     System.out.println("AfterClass");
 }
 
 //初始化时进行的操作
 @Before
 public void before(){
     System.out.println("before");
 }
 
 //测试结束时进行的操作
 @After
 public void after(){
     System.out.println("after");
 }
 
 
//忽略测试方法

 @Ignore
 public void testT(){
 
 }
 
 @Test
 public void test1() {
      ApplicationContext ac = new ClassPathXmlApplicationContext(new String[]{"spring.xml","spring-mybatis.xml"});
      ProCategoryI procategoryservice = (ProCategoryI) ac.getBean("ProCategoryService");
      ProCategory p = procategoryservice.getProCategoryById(1);
      System.out.println(p);
 }
}




JUnit测试SpringMVC
import java.util.Date;
import java.util.UUID;

import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:spring.xml", "classpath:spring-hibernate.xml" })
public class TestHibenate {
     
// 在任何方法运行前运行一次该方法
     @BeforeClass
     public static void beforeclass() {
         System.out.println("BeforeClass");
     }

     
// 在任何方法运行后运行一次该方法
     @AfterClass
     public static void afterclass() {
         System.out.println("AfterClass");
     }

    
// 初始化时进行的操作
    @Before
    public void before() {
        System.out.println("before");
    }

    
// 测试结束时进行的操作
    @After
    public void after() {
        System.out.println("after");
    }

   
// 忽略测试方法
    @Ignore
   public void testT() {
   }

   private UserServiceI userService;

   @Ignore
   public void test() {
       tUser user = new tUser();
       user.setId(UUID.randomUUID().toString());
       user.setName("陈顺");
       user.setPwd("123");
       user.setCreatedatetime(new Date());
       user.setModifydatetime(new Date());
       userService.save(user);
   }
 
   // set get
   public UserServiceI getUserService() {
       return userService;
   }
   
   @Autowired
   public void setUserService(UserServiceI userService) {
       this.userService = userService;
   }

}

转载地址:http://jngab.baihongyu.com/

你可能感兴趣的文章
利用-TensorFlow-实现排序和搜索算法
查看>>
利用TensorFlow实现卷积神经网络做文本分类
查看>>
如何构建高可读性和高可重用的-TensorFlow-模型
查看>>
使用TensorFlow识别交通标志
查看>>
122. Best Time to Buy and Sell Stock II [medium] (Python)
查看>>
推荐-线下AUC提升,线上CTR无提升
查看>>
Ubuntu 安装 pylucene 踩坑还原记,并安装 SmartChineseAnalyzer
查看>>
Java编程思想学习笔记(10)
查看>>
Java编程思想学习笔记(11)
查看>>
机器学习实战:基于Scikit-Learn和TensorFlow—第五章笔记
查看>>
Java编程思想学习笔记(12)
查看>>
Java编程思想学习笔记(13)
查看>>
Java编程思想学习笔记(14)
查看>>
Java-8-UnaryOperator
查看>>
Java-8-Function
查看>>
Java-8-Stream接口
查看>>
Junit4入门
查看>>
Java与算法(11)
查看>>
Java与算法(12)
查看>>
Java与算法(13)
查看>>