`
抛出异常的爱
  • 浏览: 629326 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Spring下的业务层Unit Test修正版

阅读更多

Spring下的业务层Unit Test修正版

磨蹭了很久,终于开始用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_

    "SpringTest_springtest_spring_java_Framework_"这个标题暗示了我们讨论的是关于Spring框架的测试方面,可能是使用Spring进行单元测试或集成测试的一些实践。 描述中的“简单小应用,实现了一些基本的功能”可能是...

    spring-boot-starter-test-2.2.13.RELEASE.jar

    spring-boot-starter-test-1.0.2.RELEASE.jar 各个版本,免费下载 spring-boot-starter-test-RELEASE.jar 各个版本,免费下载 spring-boot-starter-test.jar 各个版本,免费下载 如果不能免费下载,关注我,评论区...

    Spring对于业务层的单元测试支持

    在业务层的测试中,Spring Boot Test提供了一些关键工具,如`@SpringBootTest`用于启动整个Spring应用上下文,进行端到端的测试;`@Transactional`注解确保每个测试方法都在一个新的数据库事务中运行,便于清理状态...

    spring-test-5.0.5.RELEASE-API文档-中文版 (1).zip

    包含翻译后的API文档:spring-test-5.0.5.RELEASE-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.springframework:spring-test:5.0.5.RELEASE; 标签:springframework、spring、test、中文文档、jar包、java...

    spring-test-5.2.7.RELEASE-API文档-中文版.zip

    包含翻译后的API文档:spring-test-5.2.7.RELEASE-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.springframework:spring-test:5.2.7.RELEASE; 标签:springframework、spring、test、中文文档、jar包、java...

    spring-boot-test-2.6.3-API文档-中文版.zip

    包含翻译后的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、中文...

    spring-boot-test-autoconfigure-2.5.5-API文档-中文版.zip

    包含翻译后的API文档:spring-boot-test-autoconfigure-2.5.5-javadoc-API文档-中文(简体)版.zip; Maven坐标:org.springframework.boot:spring-boot-test-autoconfigure:2.5.5; 标签:springframework、boot、...

    spring-test-5.3.15-API文档-中英对照版.zip

    包含翻译后的API文档:spring-test-5.3.15-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.springframework:spring-test:5.3.15; 标签:spring、test、springframework、jar包、java、中英对照文档...

    spring-boot-test-2.2.8.RELEASE-API文档-中英对照版.zip

    包含翻译后的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-boot-test-2.0.6.RELEASE-API文档-中文版.zip

    标签:spring、test、springframework、boot、jar包、java、API文档、中文版; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释...

    spring-test-5.0.5.RELEASE-API文档-中英对照版.zip

    包含翻译后的API文档:spring-test-5.0.5.RELEASE-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.springframework:spring-test:5.0.5.RELEASE; 标签:springframework、spring、test、中英对照文档...

    spring-boot-test示例程序

    Spring Test提供了`@WebMvcTest`注解,用于启动一个只包含Web层组件的ApplicationContext,可以隔离地测试Controller。使用`MockMvc`类,我们可以模拟HTTP请求,比如`mockMvc.perform(get("/api"))`,并验证响应结果...

    Spring test

    对于控制器层的测试,`@WebMvcTest`注解很有用,它可以启动一个简化版的Spring MVC上下文,专注于控制器的测试。我们还可以配合`MockMvc`类来进行HTTP请求模拟,验证控制器的行为。 Spring Test还提供了`@...

    spring-boot-test-autoconfigure-2.0.4.RELEASE-API文档-中英对照版.zip

    包含翻译后的API文档:spring-boot-test-autoconfigure-2.0.4.RELEASE-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.springframework.boot:spring-boot-test-autoconfigure:2.0.4.RELEASE; 标签:...

    spring-boot-test-autoconfigure-2.2.8.RELEASE-API文档-中文版.zip

    包含翻译后的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...

    spring test学习2

    3. `@SpringBootTest`:这是Spring Boot测试注解,用于启动一个完整的Spring应用上下文,可以结合其他注解如`@WebMvcTest`或`@DataJpaTest`来更专注于特定的测试层。 4. `@Autowired`:用于注入需要测试的Bean,...

    Java Unit Test 和 XML 类加载器

    标题“Java Unit Test 和 XML 类加载器”涉及的是在Java编程中进行单元测试以及XML类加载器的相关知识。这两部分是Java开发中的重要概念,尤其是对于软件质量和可维护性而言。 首先,Java Unit Test,也称为单元...

    spring test

    通过使用`@SpringBootTest`,你可以启动一个完整的Spring应用上下文,这对于测试服务层和数据访问层的交互非常有用。此外,你还可以通过`classes`或`value`属性来指定特定的配置类,或者通过`webEnvironment`属性来...

    spring-boot-test-2.2.8.RELEASE-API文档-中文版.zip

    包含翻译后的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、...

    spring-test-4.3.20.RELEASE-API文档-中英对照版.zip

    包含翻译后的API文档:spring-test-4.3.20.RELEASE-javadoc-API文档-中文(简体)-英语-对照版.zip 对应Maven信息:groupId:org.springframework,artifactId:spring-test,version:4.3.20.RELEASE 使用方法:解压...

Global site tag (gtag.js) - Google Analytics