编辑推荐: |
本文来自csdn,本文介绍了在一般java项目以及基于spring的java项目中怎么去做单元测试的相关内容。 |
|
在我们编写项目过程中,经常会需要进行代码测试,那是不是在编写一个main方法之后,然后编写各种的测试代码。这样做,显然是不合适的也是很不专业的。那怎么办呢?今天我们来聊下junit(单元测试)。
为了后期测试基于spring的单元测试,我们直接新建spring工程。
新建之后,我们先讲一般在java项目中怎么去做单元测试。
我们先定义一个实体User
在service包中新建一个接口,在接口中定义一个方法,方法的返回值就是返回一个用户对象
有有了接口,对应这我们去编写它的实现类
这里面就是一个简单的业务逻辑,如果id为1则返回一个User对象,否则返回一个空值。在真实的项目中,这边肯定不是这么简单的业务,它对应着的肯定是调用持久层相关的方法,进行业务逻辑的实现。我们这边只是为了讲解单元测试,所以例子相对简单。
service实现已经写好,那我们下步做的事情就是对它进行单元测试。
首先,新建测试类
我们这边新建跟src一样类型的源文件,名字取为test。为什么这么做?也就是这样做的好处是什么?1.层次清晰,项目代码跟测试代码分开,条目很清晰。2.方便管理。
新建好test源包之后,我们再来新建测试类。怎么新建呢?鼠标右击你要测试的类,点击new按钮,再点击右侧的other,在搜索框中输入junit。选择Junit
Test Case,点击next,出现如下界面
点击Browse按钮选择,我们新建的test源目录,勾选junit4
点击next,它会自动扫描你测试类中所有的方法。
选中你想测试的方法,点击finish。
由此我们的单元测试新建就基本完成了。
注意:我们这边引用的是junit4,那有些小伙伴加的junit3。那他们的区别是什么呢?junit3需要继承TestCase这个类,而我们junit4不需要。
import static org.junit.Assert.*; 断言(不详解,可百度)
基本注解
@Test:将一个普通的方法修饰成为一个测试方法,可以接受异常
@Test(expected=XX.class)? 接受异常
@Test(timeout=毫秒)?? 定时结束
@BeforClass:它会在所有的方法运行前被执行,只执行一次,static修饰,用来加载配置文件
@AfterClass:它会在所有的方法运行结束后被执行,static修饰,用来释放资源
@Before:会在每一个测试方法被运行前执行一次
@After:会在每一个测试方法运行后被执行
@Ignore:所修饰的方法会被测试运行器忽略
@RunWith:可以更改测试运行器 只要你的测试器继承org.junit.runner.Runner
演示如下:
右击运行选择Junit Test
显示结果:
那下面我们来结合案例来测试下我们的简单Servcie
双击我们要测试的方法名,右击运行Junit Test,首先测试面板不报错。绿色代表程序无错。红色代表程序出错,根据出错信息,查找错误所在地,然后进行修改。
左边的Runs:1/1 表示你运行了几个Test测试方法。 Errors:0 表示有多少个错误。Failures:0
表示使用断言的时候,为期望我达到的值的方法有几个。
控制台打印结果
至此我们普通的单元测试基本用法已经讲完。
那基于spring的单元测试怎么弄呢?(这边讲解是针对有spring基础的人群)
首先加载spring的jar包
spring-test-4.0.4.RELEASE(注意版本)
commons-logging-1.2.jar
在applicationContext.xml中,扫描service实现包
<context:component-scan base-package="service.impl"></context:component-scan>
在UserServiceImpl实现类上使用springmvc 注解@Service("userService")
编写spring单元测试,点击运行。
@RunWith(SpringJUnit4ClassRunner.class)? 上面已做介绍。
@ContextConfiguration(locations={"classpath:applicationContext.xml"})加载配置文件,locations参数是一个数组,可以加载多个,配置文件。
@Resource 自动注入Ioc容器的对应的bean。
@Test 我们的测试方法。
junit的套件测试:
当我们新建了大量的测试类,我们不可能当程序出现问的时候,再一个一个的打开类然后点击一个一个的方法吧。那这边就可以用到junit的套件测试。
在我们的测试包中,点击右击新建Junit Test Suit,选择我们所有的测试类,点击finish
点击运行即可,就达到我们一次测试所有测试类的目的了。
当然,junit 还有很多强大的功能,比如多参数测试等等。。。希望各位小伙伴能够愉快的玩耍,此次讲解只是最基础的用法。大神绕过。。。
但是,我们junit也不是万能的,使用junit进行单元测试,只是证明了你的程序无错,并没有证明你的程序就是对的。
|