开发应用程序,为了保证底层的代码质量,使应用容器启动后测试能够一次性通过,单元测试必不可少。
单测一般要测每一个service接口方法,这里以目前最流行的开源测试框架junit举个例子。
在工程的src/main/java下有个BookService interface
public interface BookService { int insert(BookEntity book); }
在工程的src/test/java下同包目录中写一个BookServiceTest
package com.github.baowp.domain.service; import com.github.baowp.domain.entity.BookEntity; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.test.annotation.Rollback; 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.TransactionalTestExecutionListener; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; /** * Created with IntelliJ IDEA. * User: baowp * Date: 11/27/13 * Time: 3:06 PM * To change this template use File | Settings | File Templates. */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = "BookServiceTest-context.xml")//如果配置文件在同包名下,locations可以不声明 //以下两个注解与继承AbstractTransactionalJUnit4SpringContextTests等效,用于数据库事务回滚,继承后可不声明 @Transactional @TestExecutionListeners({DependencyInjectionTestExecutionListener.class, TransactionalTestExecutionListener.class}) public class BookServiceTest /*extends AbstractTransactionalJUnit4SpringContextTests*/ { @Resource private BookService bookService; @Test @Rollback(false)//表示不回滚事务,默认为true,该注解不写也默认回滚 public void testInsert() { BookEntity book = new BookEntity(); book.setTitle("title"); book.setPrice(1.1f); int flag = bookService.insert(book); assertTrue(flag == 1); assertNotNull(book.getId()); } }
pom.xml引入
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-test</artifactId> <version>${spring.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency>
这是一个简单的单元测试例子,一般用于直接的数据库操作测试,但如果一个service的方法非常复杂,里面还有涉及调用外部应用,这时就必须在单测方法先预设这种调用的返回值,也就是mock该接口。
相关推荐
例如,JUnit用于编写测试用例,DBUnit负责数据库相关的测试,Unitils提供ORM支持和进一步的测试便利,而Mockito则用来模拟复杂的依赖关系,使得测试更加独立和可控。了解和熟练使用这些工具,对于提升软件开发效率和...
**JUnit测试执行流程** JUnit的测试执行流程大致可以分为以下几个步骤: - **加载测试类**:JUnit首先识别出标记为`@RunWith`注解的测试类,如果没有使用特定的运行器,那么默认使用JUnit的运行器。 - **实例化...
JUnit是Java编程语言中最流行的单元测试框架,它提供了注解、断言和测试套件等机制,使得编写和运行测试变得简单。JUnit5是当前的最新版本,支持Maven项目管理,并且被广泛集成在现代Java开发环境中,如Spring Boot...
一、 试验目标:掌握白盒测试方法,熟练应用junit测试工具进行单元测试,并进行代码覆盖检验。 二、 试验要求:掌握系统测试基础原理,依据白盒法设计测试用例,并撰写单元测试计划书。依据每个测试用例,编写基础...
13. JUnit与Mock测试:在开发过程中,使用JUnit进行单元测试,结合Mockito等工具模拟数据库操作,确保代码质量。 通过《Java典型应用彻查1000例第四卷:数据库应用基础》的学习,读者不仅可以掌握上述知识点,还能...
* 集成测试:对数据库的多个组件进行测试,如数据库的接口测试。 * 系统测试:对整个数据库系统进行测试,以确保数据库的正确性和安全性。 * 功能测试:对数据库的功能进行测试,如数据的添加、删除、修改等操作。 ...
结合ORMLite和JUnit,开发者可以高效地测试数据库操作,确保数据存取的正确性和稳定性。在实际项目中,这将有助于减少bug,提高软件的可靠性和可维护性。通过熟练掌握这两项技术,开发者可以更自信地处理复杂的...
在这个“junit测试JDBC错误源代码”中,开发者遇到了一个困扰:预期在数据库中插入两条数据,但实际操作并未按预期执行。为了分析并解决这个问题,我们需要深入理解JDBC的操作流程以及JUnit如何用于测试这些操作。 ...
在接口自动化测试领域,Java、...综上所述,这个压缩包可能包含了一个完整的Java+TestNG+数据库接口自动化测试框架的示例,帮助开发者高效地进行接口测试。通过学习和理解这些技术,可以提升测试效率,确保软件质量。
本实例将深入探讨Junit测试的基本用法,包括简单单元测试和综合测试的实现。 一、Junit简介 Junit是由Ernst Berg和Kent Beck共同创建的开源项目,其主要目标是提供一个易于使用的接口来编写针对Java代码的测试用例...
3. **快速测试**:单元测试应设计得快速执行,以便频繁运行。 4. **可读性**:测试方法名应清晰地描述测试的目的,测试代码应简洁明了,易于理解。 5. **避免过度测试**:不要对简单或明显无误的代码编写过多测试...
3. **单元测试**:单元测试是软件开发过程中的重要环节,它验证单个代码单元(如方法或类)的功能是否符合预期。JUnit是Java中最常用的单元测试框架,可以用于编写和运行测试用例。在Struts2SpringUnitDemo中,可能...
《单元测试之道Java版:使用JUnit》是一本深入浅出的指南,专为Java开发者揭示单元测试的重要性和实践方法。本书以JUnit作为主要工具,详细介绍了如何在Java开发过程中有效地进行单元测试,确保代码的质量和稳定性。...
8. **扩展性**:JUnit 4.10 的设计鼓励扩展,开发者可以通过实现 `org.junit.runner.RunWith` 接口创建自定义的测试框架,以适应特定的测试需求。 9. **Hamcrest匹配器**:JUnit 4.10 集成了Hamcrest库,提供了一套...
在传统的JUnit测试中,每个测试用例通常对应一个固定的数据集,而在参数化测试中,数据可以从外部数据源(如数组、CSV文件或XML文件)动态获取。 ### 使用方法 1. **引入依赖**:首先,确保你的项目已经包含了...
1. **接口测试**:在进行功能测试时,应首先针对接口进行测试。接口的实现代码可以在单元测试通过后再移到源码包中。 2. **简单的测试用例**:在功能测试阶段,无需设计过于复杂的测试用例。只需根据设计文档中的...
JUnit是Java开发者最常用的单元测试框架,它极大地简化了测试代码的编写。在JUnit4中,引入了一个强大的特性——Rule,这使得测试更加灵活且可定制化。本文将深入探讨Rule的概念、用法以及如何通过Rule实现自定义的...
接口测试通常用于验证API、数据库连接或其他系统间的通信,而单元测试则聚焦于代码模块的内部逻辑。 七、持续集成与持续测试 在现代敏捷开发中,单元测试是持续集成和持续测试流程的关键部分。通过持续集成服务器...