2012-07-27 63 views
2

測試類不能找出解決方案!嘗試使用的applicationContext無法加載的applicationContext於JUnit

@RunWith(SpringJUnit4ClassRunner.class) 

@ContextConfiguration(locations={"root-context.xml", "database.xml"}) 

@Transactional 

public class BaseDaoTest { 

@Autowired 

private EmployeesDAO emplDao; 

...

根context.xml中和database.xml測試吾道與測試課程相同。我從WEB-INF/spring發佈了這些xml-s。
我得到了一個錯誤:

Testsuite: org.company.employees.dao.BaseDaoTest 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:186) 
    at org.apache.log4j.helpers.Loader.loadClass(Loader.java:179) 
    at org.apache.log4j.xml.DOMConfigurator.parseLayout(DOMConfigurator.java:534) 
    at org.apache.log4j.xml.DOMConfigurator.parseAppender(DOMConfigurator.java:259) 
    at org.apache.log4j.xml.DOMConfigurator.findAppenderByName(DOMConfigurator.java:171) 
    at org.apache.log4j.xml.DOMConfigurator.findAppenderByReference(DOMConfigurator.java:184) 
    at org.apache.log4j.xml.DOMConfigurator.parseChildrenOfLoggerElement(DOMConfigurator.java:502) 
    at org.apache.log4j.xml.DOMConfigurator.parseCategory(DOMConfigurator.java:415) 
    at org.apache.log4j.xml.DOMConfigurator.parse(DOMConfigurator.java:919) 
    at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:790) 
    at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:696) 
    at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:471) 
    at org.apache.log4j.LogManager.<clinit>(LogManager.java:125) 
    at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:73) 
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:249) 
    at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155) 
    at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:131) 
    at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:351) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<clinit>(SpringJUnit4ClassRunner.java:91) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525) 
    at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:31) 
    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:24) 
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57) 
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29) 
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57) 
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24) 
    at junit.framework.JUnit4TestAdapter.<init>(JUnit4TestAdapter.java:31) 
    at junit.framework.JUnit4TestAdapter.<init>(JUnit4TestAdapter.java:24) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525) 
    at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:474) 
    at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:1060) 
    at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:911) 
log4j:ERROR No layout set for the appender named [consoleAppender]. 
Tests run: 1, Failures: 0, Errors: 1, Time elapsed: 1,108 sec 

------------- Standard Error ----------------- 
log4j:ERROR Could not create the Layout. Reported error follows. 
java.lang.ClassNotFoundException: org.apache.log4j.EnhancedPatternLayout 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366) 
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:423) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308) 
    at java.lang.ClassLoader.loadClass(ClassLoader.java:356) 
    at java.lang.Class.forName0(Native Method) 
    at java.lang.Class.forName(Class.java:186) 
    at org.apache.log4j.helpers.Loader.loadClass(Loader.java:179) 
    at org.apache.log4j.xml.DOMConfigurator.parseLayout(DOMConfigurator.java:534) 
    at org.apache.log4j.xml.DOMConfigurator.parseAppender(DOMConfigurator.java:259) 
    at org.apache.log4j.xml.DOMConfigurator.findAppenderByName(DOMConfigurator.java:171) 
    at org.apache.log4j.xml.DOMConfigurator.findAppenderByReference(DOMConfigurator.java:184) 
    at org.apache.log4j.xml.DOMConfigurator.parseChildrenOfLoggerElement(DOMConfigurator.java:502) 
    at org.apache.log4j.xml.DOMConfigurator.parseCategory(DOMConfigurator.java:415) 
    at org.apache.log4j.xml.DOMConfigurator.parse(DOMConfigurator.java:919) 
    at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:790) 
    at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:696) 
    at org.apache.log4j.helpers.OptionConverter.selectAndConfigure(OptionConverter.java:471) 
    at org.apache.log4j.LogManager.<clinit>(LogManager.java:125) 
    at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:73) 
    at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:249) 
    at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155) 
    at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:131) 
    at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:351) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<clinit>(SpringJUnit4ClassRunner.java:91) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525) 
    at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:31) 
    at org.junit.internal.builders.AnnotatedBuilder.runnerForClass(AnnotatedBuilder.java:24) 
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57) 
    at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:29) 
    at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:57) 
    at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:24) 
    at junit.framework.JUnit4TestAdapter.<init>(JUnit4TestAdapter.java:31) 
    at junit.framework.JUnit4TestAdapter.<init>(JUnit4TestAdapter.java:24) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:525) 
    at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:474) 
    at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:1060) 
    at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:911) 
log4j:ERROR No layout set for the appender named [consoleAppender]. 
------------- ---------------- --------------- 
Testcase: testCreateEmployee(org.company.employees.dao.BaseDaoTest): Caused an ERROR 
Failed to load ApplicationContext 
java.lang.IllegalStateException: Failed to load ApplicationContext 
    at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:308) 
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:109) 
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:75) 
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:321) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:211) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:289) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:231) 
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61) 
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70) 
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:174) 
Caused by: org.springframework.beans.factory.BeanInitializationException: Could not load properties; nested exception is java.io.FileNotFoundException: class path resource [WEB-INF/spring/jdbc.properties] cannot be opened because it does not exist 
    at org.springframework.beans.factory.config.PropertyResourceConfigurer.postProcessBeanFactory(PropertyResourceConfigurer.java:78) 
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:663) 
    at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:638) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:407) 
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:84) 
    at org.springframework.test.context.support.AbstractGenericContextLoader.loadContext(AbstractGenericContextLoader.java:1) 
    at org.springframework.test.context.TestContext.loadApplicationContext(TestContext.java:280) 
    at org.springframework.test.context.TestContext.getApplicationContext(TestContext.java:304) 
Caused by: java.io.FileNotFoundException: class path resource [WEB-INF/spring/jdbc.properties] cannot be opened because it does not exist 
    at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:158) 
    at org.springframework.core.io.support.PropertiesLoaderSupport.loadProperties(PropertiesLoaderSupport.java:181) 
    at org.springframework.core.io.support.PropertiesLoaderSupport.mergeProperties(PropertiesLoaderSupport.java:161) 
    at org.springframework.beans.factory.config.PropertyResourceConfigurer.postProcessBeanFactory(PropertyResourceConfigurer.java:69) 

回答

3

它看起來像你必須從你的情況下的一個文件到文件jdbc.properties的依賴。你將不得不修正參考該文件 - 某處放置在類路徑中,並參考其與classpath:/mypath/jdbc.properties

+0

感謝您的幫助!現在它的工作 – ema 2012-07-27 16:27:07

+1

記得標記這個答案是正確的,如果這爲你工作。 – 2013-07-09 13:24:32

2
package au.com.flexcontacts.test.common; 


import org.junit.runner.RunWith; 
import org.springframework.beans.BeansException; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.beans.factory.config.ConfigurableBeanFactory; 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.ApplicationContextAware; 
import org.springframework.mock.web.MockHttpServletRequest; 
import org.springframework.orm.hibernate3.HibernateTemplate; 
import org.springframework.test.context.ContextConfiguration; 
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 
import org.springframework.web.context.request.RequestContextHolder; 
import org.springframework.web.context.request.RequestScope; 
import org.springframework.web.context.request.ServletRequestAttributes; 
import org.springframework.web.context.request.SessionScope; 

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration({"classpath:/controllers.xml"}) 
public class SpringTest implements ApplicationContextAware { 

    protected ApplicationContext applicationContext; 
    protected MockHttpServletRequest request; 
    protected ServletRequestAttributes attributes; 

    public void setApplicationContext(ApplicationContext applicationContext1) 
      throws BeansException { 
     applicationContext = applicationContext1; 
    } 

    protected void scopedBeansConfig() {   
     ConfigurableBeanFactory configurableBeanFactory = (ConfigurableBeanFactory) applicationContext.getAutowireCapableBeanFactory(); 
     configurableBeanFactory.registerScope("session", new SessionScope()); 
     configurableBeanFactory.registerScope("request", new RequestScope()); 
     request = new MockHttpServletRequest(); 
     attributes = new ServletRequestAttributes(request); 
     RequestContextHolder.setRequestAttributes(attributes); 
    } 

} 

這是我做了什麼。我所有的春季考試都將擴大這門課程。

+0

感謝的人!會使用它 – ema 2012-07-27 16:28:06

+0

@ emir-ali讓我知道它是否適合你 – Khush 2012-07-30 01:19:03

+0

這個工作適合你嗎? @埃米爾 - 阿里 – Khush 2012-08-01 06:42:14

相關問題