`
897371388
  • 浏览: 529166 次
文章分类
社区版块
存档分类
最新评论

Spring MVC Junit测试实例 附:读取WEB-INF下配置文件的方法

 
阅读更多
Spring+Unit测试实例:
之前写过一个连接数据库的spring mvc annotation的一个实例(点击这里查看)。
当我们启动Web项目时要先启动Tomcat,而在Tomcat的启动过程中会读取spring项目的的各个配置文件,实例化各个注入的类,所以我们的程序中直接使用注解就可以操作各个类。

但是如果按普通的项目测试,就缺少了读取配置文件的过程,所以当你调用一个类方法时会出现空指针错误,因为类没有实例化。

对Spring MVC Dao的JUnit的测试。

下面是对上面提到的实例中的UserDao.class的测试,内容如下:

package org.spring.wayne.dao;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.spring.wayne.web.form.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "file:WebContent/WEB-INF/springMVCForm-servlet.xml" })
public class UserDaoTest {

	@Autowired
	private UserDao userDao;

	@Test
	public void test() {
		User user = new User();
		user.setUserName("u");
		user.setPassword("p");
		userDao.addUser(user);
	}

}
右键->Run as->JUnit Test运行,无误。查询数据库显示已经插入数据库。

对Spring MVC Controller的JUnit的测试。

下面是对上面提到的实例中的RegController.class的测试,内容如下:

package org.spring.wayne.web.controller;

import static org.junit.Assert.assertEquals;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations;
import org.spring.wayne.web.form.User;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.ui.ExtendedModelMap;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;

public class RegControllerTest {

	@Mock
	private BindingResult mockBindingResult;
	
	@Before
	public void setUp() {
		MockitoAnnotations.initMocks(this);
		Mockito.when(mockBindingResult.hasErrors()).thenReturn(true);
	}

	@Test
	public void test() throws Exception {
		MockHttpServletRequest request = new MockHttpServletRequest();
		MockHttpServletResponse response = new MockHttpServletResponse();
		RegController regController = new RegController();
		Model model = new ExtendedModelMap();
		User user = new User();
		user.setUserName("uuuuuuu");
		user.setPassword("ppppppp");
		String result = regController.handler(user, mockBindingResult, model, request, response);
		System.out.println(result);
		assertEquals("register", result);
	}

	@After
	public void destroy() {

	}
}
右键->Run as->JUnit Test运行,无误





读取WEB-INF下配置文件的方法:

配置文件放在class目录下:

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("springMVCForm-servlet.xml");

WEB-INF下:

ApplicationContext applicationContext = new FileSystemXmlApplicationContext("WebContent/WEB-INF/springMVCForm-servlet.xml");

多个文件可用*表示:

ApplicationContext applicationContext = new FileSystemXmlApplicationContext("WebContent/WEB-INF/springMVCForm-*.xml");
注解方式:

配置文件放在class目录下:

@ContextConfiguration(locations={"classpath:springMVCForm-servlet.xml"})

WEB-INF下:

@ContextConfiguration(locations={"file:WebContent/WEB-INF/springMVCForm-servlet.xml"})

使用注解时,Junit报错:

java.lang.NoSuchFieldError: NULL
	at org.junit.runners.ParentRunner.<init>(ParentRunner.java:48)
	at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:58)
	at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.java:104)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	at org.junit.internal.requests.ClassRequest.buildRunner(ClassRequest.java:33)
	at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:28)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.<init>(JUnit4TestReference.java:33)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestClassReference.<init>(JUnit4TestClassReference.java:25)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:48)
	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:38)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:452)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
经检查是jar包冲突,我在建项目的时候,myeclipse有自动加入junit4,而后面我又自己加入Junit4.8.1。
如果报以下错误,则是junit包版本太低,需要4.5或以上的版本:
Caused by: java.lang.ClassNotFoundException: org.junit.runners.BlockJUnit4ClassRunner  
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)  
    at java.security.AccessController.doPrivileged(Native Method)  
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)  
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)  
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)  
    at java.lang.ClassLoader.loadClass(ClassLoader.java:252)  
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)

#


分享到:
评论

相关推荐

    junit-jupiter-engine-5.8.2-API文档-中文版.zip

    赠送jar包:junit-jupiter-engine-5.8.2.jar; 赠送原API文档:junit-jupiter-engine-5.8.2-javadoc.jar; 赠送源代码:junit-jupiter-engine-5.8.2-sources.jar; 赠送Maven依赖信息文件:junit-jupiter-engine-...

    junit-jupiter-api-5.4.2-API文档-中英对照版.zip

    赠送jar包:junit-jupiter-api-5.4.2.jar; 赠送原API文档:junit-jupiter-api-5.4.2-javadoc.jar; 赠送源代码:junit-jupiter-api-5.4.2-sources.jar; 赠送Maven依赖信息文件:junit-jupiter-api-5.4.2.pom; ...

    junit-jupiter-api-5.8.2-API文档-中文版.zip

    赠送jar包:junit-jupiter-api-5.8.2.jar; 赠送原API文档:junit-jupiter-api-5.8.2-javadoc.jar; 赠送源代码:junit-jupiter-api-5.8.2-sources.jar; 赠送Maven依赖信息文件:junit-jupiter-api-5.8.2.pom; ...

    junit-jupiter-engine-5.8.0-M1-API文档-中文版.zip

    赠送jar包:junit-jupiter-engine-5.8.0-M1.jar; 赠送原API文档:junit-jupiter-engine-5.8.0-M1-javadoc.jar; 赠送源代码:junit-jupiter-engine-5.8.0-M1-sources.jar; 赠送Maven依赖信息文件:junit-jupiter-...

    junit-jupiter-api-5.7.2-API文档-中文版.zip

    赠送jar包:junit-jupiter-api-5.7.2.jar; 赠送原API文档:junit-jupiter-api-5.7.2-javadoc.jar; 赠送源代码:junit-jupiter-api-5.7.2-sources.jar; 赠送Maven依赖信息文件:junit-jupiter-api-5.7.2.pom; ...

    junit-jupiter-api-5.8.0-M1-API文档-中英对照版.zip

    赠送jar包:junit-jupiter-api-5.8.0-M1.jar; 赠送原API文档:junit-jupiter-api-5.8.0-M1-javadoc.jar; 赠送源代码:junit-jupiter-api-5.8.0-M1-sources.jar; 赠送Maven依赖信息文件:junit-jupiter-api-5.8.0-...

    junit-platform-launcher-1.8.0-M1-API文档-中文版.zip

    赠送jar包:junit-platform-launcher-1.8.0-M1.jar; 赠送原API文档:junit-platform-launcher-1.8.0-M1-javadoc.jar; 赠送源代码:junit-platform-launcher-1.8.0-M1-sources.jar; 赠送Maven依赖信息文件:junit-...

    junit-jupiter-api-5.5.2-API文档-中文版.zip

    赠送jar包:junit-jupiter-api-5.5.2.jar; 赠送原API文档:junit-jupiter-api-5.5.2-javadoc.jar; 赠送源代码:junit-jupiter-api-5.5.2-sources.jar; 赠送Maven依赖信息文件:junit-jupiter-api-5.5.2.pom; ...

    junit-jupiter-params-5.8.0-M1-API文档-中文版.zip

    赠送jar包:junit-jupiter-params-5.8.0-M1.jar; 赠送原API文档:junit-jupiter-params-5.8.0-M1-javadoc.jar; 赠送源代码:junit-jupiter-params-5.8.0-M1-sources.jar; 赠送Maven依赖信息文件:junit-jupiter-...

    junit-platform-launcher-1.8.0-M1-API文档-中英对照版.zip

    赠送jar包:junit-platform-launcher-1.8.0-M1.jar; 赠送原API文档:junit-platform-launcher-1.8.0-M1-javadoc.jar; 赠送源代码:junit-platform-launcher-1.8.0-M1-sources.jar; 赠送Maven依赖信息文件:junit-...

    junit-jupiter-api-5.8.0-M1-API文档-中文版.zip

    赠送jar包:junit-jupiter-api-5.8.0-M1.jar; 赠送原API文档:junit-jupiter-api-5.8.0-M1-javadoc.jar; 赠送源代码:junit-jupiter-api-5.8.0-M1-sources.jar; 赠送Maven依赖信息文件:junit-jupiter-api-5.8.0-...

    junit-jupiter-params-5.7.2-API文档-中文版.zip

    赠送jar包:junit-jupiter-params-5.7.2.jar; 赠送原API文档:junit-jupiter-params-5.7.2-javadoc.jar; 赠送源代码:junit-jupiter-params-5.7.2-sources.jar; 赠送Maven依赖信息文件:junit-jupiter-params-...

    junit-platform-engine-1.8.2-API文档-中文版.zip

    赠送jar包:junit-platform-engine-1.8.2.jar; 赠送原API文档:junit-platform-engine-1.8.2-javadoc.jar; 赠送源代码:junit-platform-engine-1.8.2-sources.jar; 赠送Maven依赖信息文件:junit-platform-engine...

    junit-jupiter-engine-5.4.2-API文档-中文版.zip

    赠送jar包:junit-jupiter-engine-5.4.2.jar; 赠送原API文档:junit-jupiter-engine-5.4.2-javadoc.jar; 赠送源代码:junit-jupiter-engine-5.4.2-sources.jar; 赠送Maven依赖信息文件:junit-jupiter-engine-...

    junit-platform-launcher-1.6.1-API文档-中文版.zip

    赠送jar包:junit-platform-launcher-1.6.1.jar; 赠送原API文档:junit-platform-launcher-1.6.1-javadoc.jar; 赠送源代码:junit-platform-launcher-1.6.1-sources.jar; 赠送Maven依赖信息文件:junit-platform-...

    junit-vintage-engine-5.8.0-M1-API文档-中英对照版.zip

    赠送jar包:junit-vintage-engine-5.8.0-M1.jar; 赠送原API文档:junit-vintage-engine-5.8.0-M1-javadoc.jar; 赠送源代码:junit-vintage-engine-5.8.0-M1-sources.jar; 赠送Maven依赖信息文件:junit-vintage-...

    junit-jupiter-params-5.5.2-API文档-中文版.zip

    赠送jar包:junit-jupiter-params-5.5.2.jar; 赠送原API文档:junit-jupiter-params-5.5.2-javadoc.jar; 赠送源代码:junit-jupiter-params-5.5.2-sources.jar; 赠送Maven依赖信息文件:junit-jupiter-params-...

    junit-vintage-engine-5.5.2-API文档-中文版.zip

    赠送jar包:junit-vintage-engine-5.5.2.jar; 赠送原API文档:junit-vintage-engine-5.5.2-javadoc.jar; 赠送源代码:junit-vintage-engine-5.5.2-sources.jar; 赠送Maven依赖信息文件:junit-vintage-engine-...

    junit-vintage-engine-5.8.0-M1-API文档-中文版.zip

    赠送jar包:junit-vintage-engine-5.8.0-M1.jar; 赠送原API文档:junit-vintage-engine-5.8.0-M1-javadoc.jar; 赠送源代码:junit-vintage-engine-5.8.0-M1-sources.jar; 赠送Maven依赖信息文件:junit-vintage-...

    junit-platform-commons-1.8.2-API文档-中英对照版.zip

    赠送jar包:junit-platform-commons-1.8.2.jar; 赠送原API文档:junit-platform-commons-1.8.2-javadoc.jar; 赠送源代码:junit-platform-commons-1.8.2-sources.jar; 赠送Maven依赖信息文件:junit-platform-...

Global site tag (gtag.js) - Google Analytics