2019独角兽企业重金招聘Python工程师标准>>>

使用jUnit4的操作步骤及注意事项: 
1.为项目导入Junit的jar包(Build path -> Add Library ->Junit)。 
2.新建一个名为Test的Source Folder,用于存放测试类源代码。 
3.目标类与测试类应该位于同一个报下面,这样测试类中就不必导入源代码所在的包,因为他们位于用一个包下面。 
4.Junit4并不需要测试类继承TestCase父类。 
5.在一个测试类中,所有被@Test注解所修饰的public void方法都是testCase(测试用例),可以被Junit所执行。 
6.规范:虽然Junit4并不要求测试方法名以test开头,但最好还是按照Junit3的要求那样,以test作为测试方法名的开头。 
7.在Junit4中,通过@Before注解实现与Junit3中的setUp方法同样的功能。 
8.在Junit4中,可以使用@BeforeClass与@AfterClass注解修饰一个public static void no—arg的方法,这样被@beforeClass注解所修饰的方法会在所有测试方法执行前执行。 
9.注解@lgnore可用于修饰测试类与测试方法,当修饰测试类时,表示忽略掉类中的所有测试方法;当修饰测试方法时,表示忽略掉该测试方法。 
10.参数化测试(Parameters):当一个测试类使用参数化运行器运行时, 
     需要在类的声明处加上 @RunWith(Parameterized.class)注解,表示该类将不使用JUnit内建的运行器运行, 
     而使用参数化运行器运行;在参数化运行类中提供参数的方法上要使用 @Parameters注解来修饰, 
     同时在测试类的构造方法中为各个参数赋值(构造方法是由JUnit 调用的), 
     最后编写测试类,它会根据参数的组数来运行测试多次。 
11.在JUnit4中,如果想要同时运行多个测试,需要使用两个注解: 
     @RunWith(Suite.class)以及 @Suite.SuiteClasses(),通过这两个注解分别指定使用Suite运行器来运行测试, 
     以及指定了运行哪些测试类,其中的 @SuiteClasses中可以继续指定Suite,这样JUnit会再去寻找里面的测试类, 
     一直找到能够执行的TestCase并执行之。 
12.JUnit4中可以使用JUnit3的方法进行测试,而不使用注解机制,即JUnit3可以完美升级至JUnit4,但4更灵活、方便。

Java代码  

  1. Eg:

  2. //在所有测试方法前执行一次

  3. @BeforeClass

  4. //在所有测试方法后执行一次

  5. @AfterClass

  6. //在每个测试方法前执行

  7. @Before

  8. //在每个测试方法后执行

  9. @After

  10. // 测试方法执行超过1000毫秒后算超时,测试将失败

  11. @Test(timeout = 1000)

  12. // 测试方法期望得到的异常类

  13. @Test(expected = Exception.class)

  14. // 执行测试时将忽略掉此方法,如果用于修饰类,则忽略整个类

  15. @Ignore("not ready yet")

  16. @Test

Eg:简单Junit4测试类。

Java代码  

  1. public class BuyerTest {

  2. private static BuyerService buyerService;

  3. @BeforeClass

  4. public static void setUpBeforeClass() throws Exception {

  5. try {

  6. ApplicationContext act = new ClassPathXmlApplicationContext("applicationContext.xml");

  7. buyerService = (BuyerService) act.getBean("buyerServiceBean");

  8. } catch (RuntimeException e) {

  9. System.out.println(e.getMessage());

  10. e.printStackTrace();

  11. }

  12. }

  13. @Test

  14. public void save() {

  15. System.out.println("测试Spring3.05+JPA(Hibernate3.6)环境");

  16. for (int i = 0; i < 26; i++) {

  17. buyerService.save(new Buyer("S7HF" + i, MD5.MD5Encode("123456"),

  18. "xiangyunzk.net163@.com"));

  19. }

  20. }

  21. }

基于Spring注解的方式测试: 
首先需要增加org.springframework.test-3.0.5.RELEASE.jar当然junit4.jar必不可少。 
首先来一个能够自动回滚的用于测试的父类——AbstractTestCase

Java代码  

  1. package cn.itcast.junit.test;

  2. import org.junit.runner.RunWith;

  3. import org.springframework.test.AbstractTransactionalDataSourceSpringContextTests;

  4. import org.springframework.test.context.ContextConfiguration;

  5. import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

  6. import org.springframework.test.context.transaction.TransactionConfiguration;

  7. import org.springframework.transaction.annotation.Transactional;

  8. /**

  9. * @Title: AbstractTestCase.java

  10. * @Package: cn.itcast.junit.test

  11. * @Description: TODO(用一句话描述该文件做什么)

  12. * @author: 何枫

  13. * @date: 2012-6-28 下午09:59:36

  14. * @version: V1.0

  15. */

  16. @SuppressWarnings("deprecation")

  17. @ContextConfiguration({"classpath:applicationContext.xml","classpath:spring/buyer/applicationContext-service.xml"

  18. })

  19. @RunWith(SpringJUnit4ClassRunner.class) //SpringJUnit支持,由此引入Spring—Test框架支持。

  20. @Transactional //这个非常关键,如果不加入这个注解配置,事务控制就会完全失效

  21. //这里的事务关联到配置文件中的事务控制器(transactionManager = "transactionManager"),同时指定自动回滚(defaultRollback = true).

  22. //这样做操作的数据库才不会污染数据库!

  23. @TransactionConfiguration(transactionManager = "transactionManager",defaultRollback = true)

  24. //AbstractTransactionalDataSourceSpringContextTests要想构建这一系列的无污染纯绿色事务测试框架就必须找到这个基类!

  25. public abstract class AbstractTestCase extends

  26. AbstractTransactionalDataSourceSpringContextTests {

  27. }

Java代码  

  1. package cn.itcast.junit.test;

  2. import org.junit.Test;

  3. import org.springframework.beans.factory.annotation.Autowired;

  4. import cn.itcast.bean.QueryResult;

  5. import cn.itcast.bean.user.Buyer;

  6. import cn.itcast.service.buyer.BuyerService;

  7. /**

  8. * @Title: BuyerSpringtest.java

  9. * @Package: cn.itcast.junit.test

  10. * @Description: TODO(用一句话描述该文件做什么)

  11. * @author: 何枫

  12. * @date: 2012-6-28 下午10:19:21

  13. * @version: V1.0

  14. */

  15. public class BuyerSpringTest extends AbstractTestCase {

  16. @Autowired

  17. private BuyerService buyerServiceBean;

  18. @Test

  19. public void listTest(){

  20. System.out.println(buyerServiceBean.find(Buyer.class, 19L).toString());

  21. }

  22. @Test

  23. public void getScrollDataTotal() {

  24. QueryResult<Buyer> qr = buyerServiceBean.getScrollData(0, 5);

  25. System.out.println("总记录数:"+ qr.getTotalRecord());

  26. for ( Buyer buyer : qr.getResultList()) {

  27. System.out.println(buyer.getPassword());

  28. }

  29. }

  30. }

让每个测试类都写第一种方式那样写一堆配置很麻烦而且足够重复,索性来个基类来完成基础工作! 
逐行解析: 
@ContextConfiguration({"classpath:applicationContext.xml","classpath:spring/buyer/applicationContext-service.xml"}) 
导入配置文件,这里我的applicationContext配置文件是根据模块来分类的。如果有多个模块就引入多个“applicationContext-service.xml”文件。如果所有的都是写在“applicationContext。xml”中则这样导入: 
@ContextConfiguration(locations = "classpath:applicationContext.xml") 
@RunWith(SpringJUnit4ClassRunner.class)SpringJUnit支持,由此引入Spring-Test框架支持! 
@Transactional这个非常关键,如果不加入这个注解配置,事务控制就会完全失效! 
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)这里的事务关联到配置文件中的事务控制器(transactionManager = "transactionManager"),同时指定自动回滚(defaultRollback = true)。这样做操作的数据才不会污染数据库! 
AbstractTransactionalDataSourceSpringContextTests要想构建这一系列的无污染纯绿色事务测试框架就必须找到这个基类!

==========================================================================

实际中一个配置如下:

/*** @Title: MeetingForSopControllerTest.java* @Package com.wafersystems.controller* @Description: TODO(用一句话描述该文件做什么)* @author Administrator* @date 2015年4月22日 下午4:16:14*/
package com.wafersystems.controller;import java.util.List;import javax.annotation.Resource;import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.TestExecutionListeners;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.support.DependencyInjectionTestExecutionListener;
import org.springframework.test.context.transaction.TransactionConfiguration;import com.wafersystems.dto.sop.DeviceBack;
import com.wafersystems.dto.sop.MeetingRoomBackWithMap;
import com.wafersystems.dto.sop.RoomBackWithMap;
import com.wafersystems.dto.sop.ZoneAndRoomBackWithMap;/**
* @ClassName: MeetingForSopControllerTest
* @Description: TODO(这里用一句话描述这个类的作用)
* @author Administrator
*/
@RunWith(SpringJUnit4ClassRunner.class)
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class })
@ContextConfiguration("classpath:applicationContext.xml")
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
public class MeetingForSopControllerTest {@Resource(name = "meetingForSopController")private MeetingForSopController    sop;/*** Test method for {@link com.wafersystems.controller.MeetingForSopController#overridelistAllRoomsWithMap(java.lang.String, java.lang.String, java.lang.String)}.*/@Testpublic void testOverridelistAllRoomsWithMap() {sop.overridelistAllRoomsWithMap("", "wafersystems.com", "xuqiang");}@Testpublic void testListAllRoomsWithMap() {MeetingRoomBackWithMap meetingRoomBack = (MeetingRoomBackWithMap) sop.listAllRoomsWithMap("","wafersystems.com", "xuqiang");if (meetingRoomBack == null) {System.out.println("null 。。。");System.exit(0);}int result = meetingRoomBack.getResult();System.out.println("result: " + result);List<ZoneAndRoomBackWithMap> zones = meetingRoomBack.getZones();for (ZoneAndRoomBackWithMap zone : zones) {System.out.println("zoneId: " + zone.getId());System.out.println("zoneName :" + zone.getName());List<RoomBackWithMap> rooms = zone.getRooms();for (RoomBackWithMap room : rooms) {System.out.println("    roomName: " + room.getName());System.out.println("    id: " + room.getRoomId());System.out.println("    roomManager: " + room.getRoomManager());System.out.println("    roomRemark: " + room.getRemark());List<DeviceBack> devs = room.getDevices();for (DeviceBack dev : devs) {System.out.println("        devId:" + dev.getDeviceId());System.out.println("        devDevName:" + dev.getDeviceName());}}}}}

转载于:https://my.oschina.net/xuqiang/blog/405124

java web Junit相关推荐

  1. Java Web开发API Boy如何进阶?

    导语 | Java Web后台开发基本都离不开Spring生态这一套,Spring框架功能极其强大,会帮忙做许多工作,我们通常只需要在一个函数(包含request和response两个入参)中写处理逻 ...

  2. java jetty eclipse_用Eclipse+Maven+Jetty构建Java Web开发环境(详细笔记)

    (软件环境) 『系统』Windows 10 x64 『JAVA』JDK 1.8.0_91 『Eclipse』 Eclipse-oxygen 『Maven』 apache-maven-3.6.3 『Je ...

  3. Java Web技术经验总结(二)

    该系列的第一篇在此:Java Web技术经验总结一,主要包含我在日常工作中的经验和心得体会(如有不足之处欢迎指出). Maven的使用经验 依赖的scope有test.provided.compile ...

  4. DOS命令行中用MAVEN构建Java和Java Web项目

    一.Maven的安装 : 1.将maven3.0解压到任一目录下,如D:\Program Files 2.配置环境变量:变量名:MAVEN_HOME   变量值:D:\Program Files\ap ...

  5. maven + spring mvc 创建Java web项目

    本篇文章,我们会教你通过maven和spring mvc创建一个Java web项目.关于maven如何创建普通的Java项目,上一篇文章已经作了说明. 开发环境: 1.jdk 1.7 2.Maven ...

  6. IntelliJ IDEA 12创建Maven管理的Java Web项目(图解)

    2019独角兽企业重金招聘Python工程师标准>>> 本文主要使用图解介绍了使用IntelliJIDEA 12创建Maven管理的Java Web项目的过程. 本文PDF文档下载地 ...

  7. Java Web App体系结构

    我曾经利用Servlet,JSP,JAX-RS,Spring框架,Play框架,带有Facelets的JSF和一些Spark框架. 以我的拙见,所有这些解决方案都远非面向对象和优雅的. 它们都充满了静 ...

  8. 【Spring Boot】使用Spring Boot来搭建Java web项目以及开发过程

    [Spring Boot]使用Spring Boot来搭建Java web项目以及开发过程 一.Spring Boot简介 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来 ...

  9. Android+Java Web+MySQL实现登录注册

    1 前言&概述 这篇文章是基于此处文章的更新,更新了一些技术栈,更加贴近实际需要,以及修复了若干的错误. 这是一个前端Android+后端Java/Kotlin通过Servelt进行后台数据库 ...

最新文章

  1. Linux内核参数调优
  2. Java中 VO、 PO、DO、DTO、 BO、 QO、DAO、POJO的概念
  3. 如何用jlink+jflash烧写stm32f103CB的option bytes 和程序
  4. 深度学习(四十)——深度强化学习(3)Deep Q-learning Network(2), DQN进化史
  5. java的ZipOutputStream压缩文件的两个问题(乱码和每次zip后文件md5变化)
  6. c++ 数组的输入遇到特定字符停止输入_C语言 第4章-字符串和格式化输入/输出
  7. C语言课后习题(63)
  8. Swing写qq聊天软件(想要QQ表情@我呦)
  9. angular学习笔记(九)-css类和样式2
  10. Tinymce4 中Ajax多次加载时,会出现菜单在第二次进入时,显示的下拉菜单在左上角...
  11. cfe刷机教程 斐讯k3_玩转斐讯K3详细刷机——直接刷LEDE
  12. 单片机(STM32)内部RC振荡器误差时间到底有多少
  13. oracle11 odac,oracle 11g odac 下载
  14. 安装PHP7.4找不到包error: Package requirements (oniguruma) were not met错误
  15. 【MM系列】SAP MM物料账在制品承担差异功能及配置
  16. 疫情之下,互联网产品逆势爆发
  17. 各种抗锯齿模式略解:SSAA MSAA CSAA CFAA
  18. mongo查询时区转换
  19. 如何让两个div处于一行
  20. 一道对10年间中国行政区划个数进行对比的Python考试题

热门文章

  1. 手把手教你写ORM(三)
  2. [ZJOI2019]线段树
  3. 使用分页插件的后悔药(二)
  4. 从Netty到EPollSelectorImpl学习Java NIO
  5. Linux-DNS服务器的配置与管理(上)
  6. Spring读取配置文件,获取bean的几种方式
  7. hdu 1421 搬寝室 (dp)
  8. Android应用资源---布局资源类型(Layout)
  9. 我们究竟应不应该使用框架?
  10. webstrom代码检查