`
airu
  • 浏览: 270839 次
  • 性别: Icon_minigender_1
  • 来自: 云南
社区版块
存档分类
最新评论

Java Spring+JUnit

 
阅读更多

Spring 对于单元测试来说,我感觉还是挺方便的。

我们可以用maven来构建项目,这样对于包的依赖就交给maven处理。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>com.myapp</groupId>
    <artifactId>guiapp</artifactId>
    <version>1.0.0-SNAPSHOT</version>
  </parent>

  <artifactId>logGUIApp</artifactId>
  <packaging>jar</packaging>

  <name>my app </name>
  <description>log in interface</description>

  <dependencies>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.geronimo.specs</groupId>
      <artifactId>geronimo-atinject_1.0_spec</artifactId>
      <optional>true</optional>
    </dependency>

    <dependency>
     <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>3.1.1.RELEASE</version>
     </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
       <version>3.1.1.RELEASE</version>
      <optional>true</optional>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>3.1.1.RELEASE</version>
      </dependency>

     <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>3.1.1.RELEASE</version>
      </dependency>

    <dependency>
      <groupId>commons-lang</groupId>
      <artifactId>commons-lang</artifactId>
    </dependency>

   <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.11</version>
      </dependency>
</dependencies>
</project>

 大概就这么一个POM 文件

接下来我们还是关注如何使用Spring做单元测试。

还是来一个AbstractSpringTestCase 母类。

 

import java.io.File;

import javax.annotation.Resource;

import org.junit.BeforeClass;
import org.junit.runner.RunWith;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.junit4.AbstractJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
 * This class provides convenient afterTestClass and beforeTestClass methods from Spring Framework which subclasses can
 * override to perform actions once per test class.
 * 
 */
@RunWith(SpringJUnit4ClassRunner.class)
public abstract class AbstractSpringTestCase
    extends AbstractJUnit4SpringContextTests {

    protected static File basedir = new File( System.getProperty( "basedir", "." ) );

    protected static File builddir = new File( basedir, "target" );

    @Resource
    protected ApplicationContext applicationContext;

    /**
     * This allows eclipse and maven to have the same basedir
     */
    @BeforeClass
    public static void beforeBaseClass() {
        System.setProperty( "basedir", System.getProperty( "basedir", "." ) );
        System.setProperty( "derby.system.home", System.getProperty( "derby.system.home", "./target" ) );
    }

}

 大家看到这个类的一个注解 @RunWith 也就是JUnit使用了指定的类来启动测试

然后就交给SpringJUnit4ClassRunner 了。这个类 会寻找你的配置文件,这里我更喜欢用注解来指定

请看一个简单测试类。

@ContextConfiguration(locations = { "classpath:/com/myapp/guiapp/jdbc/test/applicationContext.xml" })
public class JdbcTest
    extends AbstractSpringTestCase {

    @Inject
    private MyAppJdbcConnectionFactory myAppJdbcConnectionFactory;

    @Inject
    private Storage storage;

    @Inject
    private TcpServerTask tcpServerTask;

    private int port;

    @Before
    public void before() {
        port = tcpServerTask.getPort();
    }

    @BeforeClass
    public static void beforeClass()
        throws Exception {
        System.setProperty( "javax.net.ssl.keyStore", basedir + "/target/etc/mc.ks" );
        System.setProperty( "javax.net.ssl.trustStore", basedir + "/target/etc/mc.ts" );
        System.setProperty( "javax.net.ssl.keyStorePassword", "changeit" );
        System.setProperty( "javax.net.ssl.trustStorePassword", "changeit" );
    }

    @Test
    public void testJdbcDirectAccessToStorage()
        throws Exception {

        Connection connection = null;
        try {

            // just enough to get JDBC connect direct to storage with same jvm, ie no tcpserver involved
            String goodUrl = "jdbc:myapp:DummyTable";
            String badUrl = "jdbc:myapp:DummyTableBad";

            try {
                connection = myAppJdbcConnectionFactory.getConnection( badUrl, "", "", null );
                Assert.fail( "Able to create connection with invalid URL" );
            }
            catch ( DataProviderException e ) {
            }

            connection = myAppJdbcConnectionFactory.getConnection( goodUrl, "", "", null );
            Assert.assertNotNull( connection );

        }
        finally {
            ConnectionUtils.closeQuietly( connection );
        }
    }
}

 @ContextConfiguration 指定了此测试类使用的bean配置文件。

在这个文件中,我们就可以定义测试需要的一些bean

<beans default-lazy-init="true" xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
  xmlns:context="http://www.springframework.org/schema/context"

  xsi:schemaLocation="
     http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans.xsd
     http://www.springframework.org/schema/tx
     http://www.springframework.org/schema/tx/spring-tx.xsd
     http://www.springframework.org/schema/aop 
     http://www.springframework.org/schema/aop/spring-aop.xsd
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context.xsd">

  <import resource="classpath:com/myapp/jdbc/applicationContext.xml" />
  <bean id="tcpServerTask" class="com.myapp.transport.server.internal.TcpServerTask">
    <property name="enableSSL" value="false" />
  </bean>
</beans>

 

然后就使劲折腾吧。

 

分享到:
评论
2 楼 airu 2013-09-27  
呵呵。注解解脱位置的依赖。不过多谢指出。
1 楼 limitee_god 2013-09-23  
代码结构很乱,至少spring的配置文件放src/main/resources下呀。任重道远。

相关推荐

    maven+spring+mybatis+mysql+junit jar项目框架搭建

    在IT行业中,构建一个高效的Java应用开发环境是至关重要的,而"Maven+Spring+MyBatis+MySQL+JUnit"的组合则是一个常见的选择。这个框架集合涵盖了项目构建、依赖管理、业务逻辑处理、数据库交互以及单元测试等多个...

    hibernate+spring+junit+ant+mysql

    标题中的“hibernate+spring+junit+ant+mysql”是一个经典的Java开发组合,它涵盖了五个重要的技术领域:Hibernate作为对象关系映射框架,Spring作为全面的轻量级框架,JUnit用于单元测试,Ant作为构建工具,以及...

    spring+junit4

    这里的`SpringJUnit4ClassRunner`是JUnit的扩展,它会启动Spring容器并初始化测试类中的bean。 接着,我们可以使用`@Autowired`注解来自动注入需要的依赖。假设我们有一个`MyService`服务需要在测试中使用: ```...

    Structs2+Spring+hibernate+jdom+junit+读取excel+serve2005+oracle+mysql 架包

    标题中的"Structs2+Spring+hibernate+jdom+junit+读取excel+serve2005+oracle+mysql 架包"涉及到一系列在Java开发中常用的框架和技术,这是一套集成的开发环境,可以帮助开发者快速搭建企业级应用。下面将对这些技术...

    Spring+JUnit4 +Ant测试报告

    总之,Spring+JUnit4+Ant的组合为Java开发提供了强大的单元测试能力。通过合理配置和使用这些工具,开发者可以更高效地进行测试,保证代码质量,降低维护成本。在压缩包文件"junitTest"中,可能包含了示例的测试代码...

    spring3 + mybatis3 + junit4 可运行项目示例

    这是一个基于Spring3、MyBatis3和JUnit4的可运行项目示例,旨在提供一个完整的、可测试的Java Web应用程序框架。这个项目的核心是利用Spring作为应用的ioc(Inversion of Control,控制反转)和aop(Aspect Oriented...

    spring+springmvc+mybatis+maven+junit整合

    【标题】"spring+springmvc+mybatis+maven+junit整合"是一个常见的Java Web开发框架集成,这个项目旨在为初学者提供一个基础的、可运行的示例,以理解这些技术如何协同工作。 【Spring框架】是核心的依赖注入(DI)...

    Struts2+Spring+hibernate中对action的单元测试环境搭建[总结].pdf

    Struts2+Spring+Hibernate 中的Action单元测试环境搭建 在软件开发中,单元测试是一种非常重要的测试方法,可以帮助我们确保代码的可靠性和稳定性。在 Struts2+Spring+Hibernate 框架中,对 Action 的单元测试环境...

    spring+springMVC+mybatis+maven+junit+mysql

    【标题】"spring+springMVC+mybatis+maven+junit+mysql" 是一个常见的Java Web项目技术栈,它涵盖了从后端开发到数据库管理,再到自动化构建和测试的完整流程。下面将详细阐述这些技术及其在项目中的作用。 ...

    maven+spring+mybatis+junit实例

    在IT行业中,构建Java应用程序时,常常会使用到"Maven+Spring+MyBatis+JUnit"这样的技术栈。这是一个高效且灵活的组合,能够帮助开发者快速地开发、测试和部署项目。下面将详细阐述这些技术及其在实际项目中的应用。...

    Spring+hibernate+junit+aop_ jar包

    标题中的"Spring+Hibernate+junit+aop"是一个经典的Java企业级开发组合,这些技术都是Java后端开发中的重要组成部分。让我们逐一深入理解这些知识点: 1. **Spring**:Spring 是一个开源的应用框架,核心功能包括...

    hibernate+spring +ant+junit

    本项目涉及的技术栈包括Hibernate、Spring、Ant以及JUnit,这些都是Java开发中至关重要的工具和框架。下面将详细阐述这些技术及其在项目中的应用。 1. **Hibernate**: Hibernate是一个优秀的对象关系映射(ORM)...

    毕业设计&课设--基于Structs+Hibernate+Spring+mahout+bootstrap+junit.zip

    标题中的“毕业设计&课设--基于Structs+Hibernate+Spring+mahout+bootstrap+junit.zip”揭示了一个软件开发项目,该项目使用了多种技术栈,主要用于教育或实践目的,如毕业设计或课程设计。这个项目涉及到的主要技术...

    maven+springMVC+mybatis+velocity+mysql+junit项目框架搭建

    JUnit是Java语言的一个单元测试框架,用于编写和运行可重复的测试。开发者可以利用JUnit编写测试用例,确保代码的功能正确性,提高代码质量。在项目开发过程中,Junit起到了关键的测试保障作用,帮助尽早发现和修复...

    spring4+junit4.8 +多线程TheadTool

    在IT行业中,Spring框架是Java开发中的一个核心组件,它为构建企业级应用程序提供了全面的解决方案。Spring4是其一个重要的版本,引入了许多增强特性和性能优化。Junit4.8则是Java单元测试的重要工具,它使得开发者...

    springboots+mybatis+junit+oracle.7z

    标题 "springboots+mybatis+junit+oracle.7z" 涉及到的是一个集成开发环境,其中包含了四个核心技术:SpringBoot、Oracle数据库、MyBatis和JUnit。让我们详细了解一下这些技术和它们如何相互协作。 **SpringBoot** ...

    编程语言+JAVAspring+测试框架+单元测试

    编程语言+JAVAspring+测试...它介绍了JAVAspring的测试框架的概念、原理和作用,以及如何使用JAVAspring的测试框架来进行单元测试,包括JUnit、TestNG、Mockito、Spring Test等内容,以及一些配置文件和注解的用法。

    基于Structs+Hibernate+Spring+mahout+bootstrap+junit+tomacat+mysql 实现的网上书店前后台系统

    使用java框架: hibernate + struts + spring + bootstarp + mahout 实现功能: 后台图书管理: 图书的增删改查, 后台类目。 前台书店: 图书的分页查看, 前台类目, 多条件查询, 智能推荐, 购物车, 支付...

    spring4+JUnit简单测试

    《Spring4与JUnit的简单测试实践》 在Java开发领域,Spring框架以其强大的功能和灵活性深受开发者喜爱。Spring4作为其一个重要的版本,引入了许多改进和优化,使得测试变得更加便捷。而JUnit作为Java单元测试的事实...

    Hibernate4+SpringMVC+Junit4+log4j环境搭建Jar包

    这里我们关注的是基于Java技术栈的Web应用环境,具体包括Hibernate4、SpringMVC、JUnit4和log4j这四个核心组件。下面将详细介绍这些组件以及如何整合它们进行环境搭建。 **1. Hibernate4** Hibernate是一个开源的...

Global site tag (gtag.js) - Google Analytics