Jeesite环境中的单元测试

使用Jeesite框架,并对其src/main/java/com/thinkgem/jeesite/common/utils/StringUtils.java文件进行单元测试。

其中public static String getMessage(String code, Object[] args) 代码内容如下:

/**
     * 获得i18n字符串
     */
    public static String getMessage(String code, Object[] args) {
        LocaleResolver localLocaleResolver = (LocaleResolver) SpringContextHolder.getBean(LocaleResolver.class);
        HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();  
        Locale localLocale = localLocaleResolver.resolveLocale(request);
        return SpringContextHolder.getApplicationContext().getMessage(code, args, localLocale);
    }

做单元测试时,不能使用常规junit方法,需要使用spring的方式,加载spring容器,注入相关注解,并配置spring-context.xml

具体单元测试代码和xml配置如下:

package com.thinkgem.jeesite.common.utils;

import static org.junit.Assert.*;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;

 

@RunWith(SpringJUnit4ClassRunner.class)  
@WebAppConfiguration
@ContextConfiguration(locations={"classpath:spring-context.xml",
                                "classpath:spring-context-activiti.xml",
                                "classpath:spring-context-jedis.xml",
                                "classpath:spring-context-shiro.xml",
                                "classpath:spring-mvc.xml",
                                "classpath:mybatis-config.xml",
                                })

public class StringUtilsTest{

    @Autowired
    ApplicationContext applicationContext;
    private  StringUtils testString;
    
    @Test
    public void testGetMessage() {
        String result=testString.getMessage("info", new String[]{"张三"});
        assertEquals("张三 go to school", result);
    }

}

 

此时进行单元测试还是失败的,需要在spring-context.xml所在位置为src/main/resources/spring-context.xml,在其开始注入注解时加入以下内容

<bean class="com.thinkgem.jeesite.common.utils.SpringContextHolder" lazy-init="false"/>
     <bean class="org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver" />  
    
    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
          <property name="basenames">
               <list>
                <value>messages</value>
               </list>
          </property>
          <property name="useCodeAsDefaultMessage" value="false"/>
        <property name="defaultEncoding" value="UTF-8"/>
        <property name="cacheSeconds" value="5"/>
     </bean>

 

Jeesite环境中的单元测试

在src/main/resources目录下新增messages_en.properties、messages_zh_CN.properties、messages.properties

其内容分别为

info={0} go to school

info={0}去上学

info={0} hehe 

 

另外需要在pom.xml文件中修改依赖

<dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.1</version>
            <scope>provided</scope>
        </dependency>
        
<dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet.jsp</groupId>
            <artifactId>jsp-api</artifactId>
            <version>2.2</version>
            <scope>provided</scope>
        </dependency> 

此时运行单元测试,结果

Jeesite环境中的单元测试