java单元测试

Wesley13
• 阅读 1070

Java单元测试

1.概述

java单元测试是最小的功能单元测试代码, 单元测试就是针对单个java方法的测试。java程序的最小功能单元是方法。

  • main方法进行测试的缺点:
    • 只能有一个main()方法, 不能把测试代码分离出来
    • 无法打印出测试结果和期望结果.例如: expected: 3628800, but actual: 123456
  • 单元测试的优点:
    • 确保单个方法正常运行
    • 如果修改了方法代码, 只需要保其对应的单元测试通过就可以了
    • 测试代码本省就可以作为示例代码
    • 可以自动化运行所有测试并获得报告

前期准备

导入maven依赖(或导入jar包):

<dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
     <!-- junit的版本有3.x, 4.x, 5.x 5.x还没有发布, 现在都用是4.x -->
</dependency>

2.单元测试

java中常用的注解介绍:

@BeforeClass:针对所有测试,只执行一次,且必须为static void

@Before:初始化方法

@Test:测试方法,在这里可以测试期望异常和超时时间

@Test(timeout=1000)可以设置超时时间,单位毫秒

@Test(expected=Exception.class), 对可能发生的每种类型的异常进行测试

// 运行如下代码, 正常运行, 确实发生了ArithmeticException异常, 代码通过
@Test(expected = ArithmeticException.class)
    public void testException() {
       int i = 1 / 0;
    }
//运行如下代码: 有报错信息
@Test(expected = ArithmeticException.class)
    public void testException() {
       int i = 1 / 1;
    }

@After:释放资源

@AfterClass:针对所有测试,只执行一次,且必须为static void

@Ignore:忽略的测试方法

编写java类

public class Calculate{
    public int calculate(int a,int b){
        return a+b;
    }
}

编写测试类

public class TestCaculate{
    @Test
    public void calculate(){
        assertEquals(3,new Calculate().calculate(1,2));
        assertEquals(6,new Calculate().calculate(1,2));
    }
}

测试结果:java.lang.AssertionError: expected:<6> but was:<3>

第一个方法是正确的没有报错

第二个方法清楚的显示了结果的对比情况

3.断言

包名:import static org.junit.Assert.*;

java单元测试

Assert.assertEquals方法

函数原型1:assertEquals([String message],expected,actual)

参数说明:

message是个可选的消息,假如提供,将会在发生错误时报告这个消息。

expected是期望值,通常都是用户指定的内容。

actual是被测试的代码返回的实际值。

函数原型2:assertEquals([String message],expected,actual,tolerance)

参数说明:

message是个可选的消息,假如提供,将会在发生错误时报告这个消息。

expected是期望值,通常都是用户指定的内容。

actual是被测试的代码返回的实际值。

tolerance是误差参数,参加比较的两个浮点数在这个误差之内则会被认为是相等的。

4.Spring整合Junit

在测试类中,每个测试方法都有以下两行代码: ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml"); IAccountService as = ac.getBean("accountService",IAccountService.class); 这两行代码的作用是获取容器,如果不写的话,直接会提示空指针异常。所以又不能轻易删掉。

步骤:

导入jar包

使用@RunWith替换原有运行器

@RunWith(SpringJUnit4ClassRunner.class)
public class AccountServiceTest {
}

使用@ContextConfiguration指定配置文件

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations= {"classpath:bean.xml"})
public class AccountServiceTest {
}

使用@Autowired注入数据

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations= {"classpath:bean.xml"})
public class AccountServiceTest {
@Autowired
private IAccountService as ;
}
点赞
收藏
评论区
推荐文章
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
java单元测试工具
前言随着DevOp的不断流行,自动化测试慢慢成为Java开发者的关注点。因此,本文将分享10款优秀的单元测试框架和库,它们可以帮助Java开发人员在其Java项目上编写单元测试和集成测试。1\.JUnit我绝对JUnit不需要太多的介绍了。即使您是Java初学者,也可能听说过它。它可以帮助您为Java代码编写单元测试。几
Wesley13 Wesley13
3年前
java之Junit
Java之Junit的使用法则第一,Junit是指单元测试,用来对java程序的测试。以后可用来对代码的测试第二,Junit使用方法命名规范:publicvoid方法名(){}第三,具体实现步奏1.创建java类 !(https://oscimg.oschina.net/oscnet/d4a6428c8c4116
Wesley13 Wesley13
3年前
java之单元测试
这篇主要简单讲下java的单元测试目录结构如下:!(https://img2018.cnblogs.com/blog/1182288/201907/1182288201907162310379601945570313.png)如图,其中1是需要被测试的功能;2是测试模块;3是单元测试需要的引入包;1\.功能模块1中Calculat
Stella981 Stella981
3年前
Demo002 IDEA中Junit单元测试的使用(初级篇)
推荐JUnit视频教程:JUnit—Java单元测试必备工具(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.imooc.com%2Flearn%2F356)。1.基本理论1.1单元测试单元测试又称模块测试,属于白盒测试,是最小单位的测试。模
Stella981 Stella981
3年前
OpenStack基础知识
针对以前学的内容的一个简单整理1、单元测试工具介绍unittest:是Python的标准库,提供了最基本的单元测试功能,包括单元测试运行器(简称runner)和单元测试框架。项目的单元测试代码的测试类可以继承unittest.TestCase类,那么这个类就能够被runner发现并且执行。同时,unittest.TestCase
可莉 可莉
3年前
19.unittest原理
单元测试单元测试(unittesting)是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。unittest运行原理
Wesley13 Wesley13
3年前
Python单元测试框架unittest简介
Python单元测试框架,其中的有些部分参照PyUnit。PyUnit是JUnit的python语言版本,它是由KentBeck和ErichGamma创建。JUnit是Kent的Smalltalk测试框架的Java版本。JUnit的每部分都是标准的单元测试框架,很多语言都受他启发而开发自身的单元测试框架。        unittest支持自动化测
Wesley13 Wesley13
3年前
C#单元测试
什么叫单元测试(unittesting)?是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一个类,图形化的软件中可以指一个窗口或一个菜单等。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动,软
Stella981 Stella981
3年前
BeanMock的使用介绍与说明
使用场景Mockito是java单元测试很常用的一个工具。但是在classAclassBclassC的场景中,假如需要对classA进行单元测试,需要针对ClassC的方法返回不同结果进行验证,而又不希望对classB进行mock。这个时候一般的解决方案有两种:1、使用反射的层层调用(但是对于更深层的调用会显得很繁琐,并