磨蹭了很久,终于开始用UnitTest。原因一是和大家一样,不想晚上做噩梦,二是在Spring下对业务层TDD,能够不需要Tomcat,完全摆脱对显示层开发进度的依赖,而专注快速的开发业务层。
但是我们也只在业务层使用UnitTest,因为显示层至今没有什么好的UnitTest方法,而我们的业务逻辑又严格封装在业务层,Controler层只做个组装分派的基本动作,没必要花大力气去测试。
在Spring下的测试很简单,在Spring-mock.jar里有一个AbstractDependencyInjectionSpringContextTests,负责ApplicationContext的载入和属性的动态注入。(详看该类的JavaDoc)
所以,只要再写一个测试父类Extend它,用DbUnit负责测试前后的数据备份和恢复。子类就可以非常轻松,只需指定特定的Context文件路径, 通过成员变量配置以下数据备份和载入的策略,还有把需要注入的成员变量设为protected就可以了.
父类的源代码:
package com.itorgan.xxxx;
import org.dbunit.database.DatabaseConnection;
import org.dbunit.database.DatabaseSequenceFilter;
import org.dbunit.dataset.xml.XmlDataSet;
import org.dbunit.dataset.FilteredDataSet;
import org.dbunit.dataset.IDataSet;
import org.dbunit.dataset.filter.ITableFilter;
import org.dbunit.operation.DatabaseOperation;
import org.springframework.test.AbstractDependencyInjectionSpringContextTests;
import com.itorgan.util.DbUtil;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.File;
import java.util.ArrayList;
public class DAOTestCase extends AbstractDependencyInjectionSpringContextTests
{
protected ArrayList<String> contexts = null;
//DBUnit相关属性
protected DatabaseConnection dbunitConn = null;
/**
* 是否需要测试前备份
*/
protected boolean needBackup = false;
/**
* 是否需要在测试后重新载入刚才备份的数据
*/
protected boolean needRestore = false;
/**
* 备份文件的路径,
* 如果为空,默认为test/dbunitData/myTestData.xml/
*/
protected String xmlFilePath = null;
/**
* 需要备份的数据库Table名
*/
protected String[] tableNames = null;
public DAOTestCase()
{
//设了这个,就能autowire by name,否则by setter.
setPopulateProtectedVariables(true);
contexts = new ArrayList<String>();
contexts.add("/applicationContext-Hibernate.xml");
contexts.add("/applicationContext-SetupService.xml");
}
public String[] getConfigLocations()
{
String[] tmp = new String[contexts.size()];
return contexts.toArray(tmp);
}
public void onSetUp() throws Exception
{
if (needBackup)
{
DbUtil dbUtil = new DbUtil(applicationContext);
dbunitConn = new DatabaseConnection(dbUtil.getConn(), "LH");
if (xmlFilePath == null)
xmlFilePath = "test/dbunitData/myTestData.xml";
if (tableNames != null)
{
ITableFilter filter = new DatabaseSequenceFilter(dbunitConn, tableNames);
IDataSet dataset = new FilteredDataSet(filter, dbunitConn.createDataSet());
File f_file = new File(xmlFilePath);
new File(f_file.getParent()).mkdirs();
XmlDataSet.write(dataset, new FileOutputStream(f_file));
}
else
{
throw new Exception("your choice backup data but no table names asign");
}
}
}
public void onTearDown() throws Exception
{
if (needRestore)
{
if (dbunitConn == null)
{
DbUtil dbUtil = new DbUtil(applicationContext);
dbunitConn = new DatabaseConnection(dbUtil.getConn(), "LH");
}
IDataSet dataSet = new XmlDataSet(new FileInputStream(xmlFilePath));
DatabaseOperation.REFRESH.execute(dbunitConn, dataSet);
}
dbunitConn.close();
}
}
子类的代码
package com.itorgan.xxx;
import com.itorgan.lherp.dao.CarDAO;
import junit.framework.Test;
import junit.framework.TestSuite;
public class CarDAOImplTest extends DAOTestCase
{
protected CarDAO carDAO; //声明为protected并且和Context,就会被动态注入
public void onSetUp() throws Exception
{
}
public void testGetGoodses() throws Exception
{
carDAO.getValidCars();
}
public static Test suite()
{
return new TestSuite(CarDAOImplTest.class);
}
}
相关推荐
"SpringTest_springtest_spring_java_Framework_"这个标题暗示了我们讨论的是关于Spring框架的测试方面,可能是使用Spring进行单元测试或集成测试的一些实践。 描述中的“简单小应用,实现了一些基本的功能”可能是...
spring-boot-starter-test-1.0.2.RELEASE.jar 各个版本,免费下载 spring-boot-starter-test-RELEASE.jar 各个版本,免费下载 spring-boot-starter-test.jar 各个版本,免费下载 如果不能免费下载,关注我,评论区...
在业务层的测试中,Spring Boot Test提供了一些关键工具,如`@SpringBootTest`用于启动整个Spring应用上下文,进行端到端的测试;`@Transactional`注解确保每个测试方法都在一个新的数据库事务中运行,便于清理状态...
包含翻译后的API文档:spring-test-5.0.5.RELEASE-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.springframework:spring-test:5.0.5.RELEASE; 标签:springframework、spring、test、中文文档、jar包、java...
包含翻译后的API文档:spring-test-5.2.7.RELEASE-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.springframework:spring-test:5.2.7.RELEASE; 标签:springframework、spring、test、中文文档、jar包、java...
包含翻译后的API文档:spring-boot-test-2.6.3-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.springframework.boot:spring-boot-test:2.6.3; 标签:spring、test、springframework、boot、jar包、java、中文...
包含翻译后的API文档:spring-boot-test-autoconfigure-2.5.5-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.springframework.boot:spring-boot-test-autoconfigure:2.5.5; 标签:springframework、boot、...
包含翻译后的API文档:spring-test-5.3.15-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.springframework:spring-test:5.3.15; 标签:spring、test、springframework、jar包、java、中英对照文档...
包含翻译后的API文档:spring-boot-test-2.2.8.RELEASE-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.springframework.boot:spring-boot-test:2.2.8.RELEASE; 标签:springframework、boot、...
标签:spring、test、springframework、boot、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释...
包含翻译后的API文档:spring-test-5.0.5.RELEASE-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.springframework:spring-test:5.0.5.RELEASE; 标签:springframework、spring、test、中英对照文档...
Spring Test提供了`@WebMvcTest`注解,用于启动一个只包含Web层组件的ApplicationContext,可以隔离地测试Controller。使用`MockMvc`类,我们可以模拟HTTP请求,比如`mockMvc.perform(get("/api"))`,并验证响应结果...
对于控制器层的测试,`@WebMvcTest`注解很有用,它可以启动一个简化版的Spring MVC上下文,专注于控制器的测试。我们还可以配合`MockMvc`类来进行HTTP请求模拟,验证控制器的行为。 Spring Test还提供了`@...
对于Web应用的测试,Spring Test提供了`MockMvc`类,可以在不启动服务器的情况下模拟HTTP请求,测试控制器的逻辑。`MockMvcBuilders`可以帮助我们构建并配置`MockMvc`实例,`mockMvc.perform()`则可以执行HTTP请求...
包含翻译后的API文档:spring-boot-test-autoconfigure-2.0.4.RELEASE-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.springframework.boot:spring-boot-test-autoconfigure:2.0.4.RELEASE; 标签:...
包含翻译后的API文档:spring-boot-test-autoconfigure-2.2.8.RELEASE-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.springframework.boot:spring-boot-test-autoconfigure:2.2.8.RELEASE; 标签:spring...
3. `@SpringBootTest`:这是Spring Boot测试注解,用于启动一个完整的Spring应用上下文,可以结合其他注解如`@WebMvcTest`或`@DataJpaTest`来更专注于特定的测试层。 4. `@Autowired`:用于注入需要测试的Bean,...
标题“Java Unit Test 和 XML 类加载器”涉及的是在Java编程中进行单元测试以及XML类加载器的相关知识。这两部分是Java开发中的重要概念,尤其是对于软件质量和可维护性而言。 首先,Java Unit Test,也称为单元...
通过使用`@SpringBootTest`,你可以启动一个完整的Spring应用上下文,这对于测试服务层和数据访问层的交互非常有用。此外,你还可以通过`classes`或`value`属性来指定特定的配置类,或者通过`webEnvironment`属性来...
包含翻译后的API文档:spring-boot-test-2.2.8.RELEASE-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.springframework.boot:spring-boot-test:2.2.8.RELEASE; 标签:springframework、boot、spring、test、...