Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringJUnit测试-实例化问题_Java_Spring_Junit_Shiro_Testcase - Fatal编程技术网

Java SpringJUnit测试-实例化问题

Java SpringJUnit测试-实例化问题,java,spring,junit,shiro,testcase,Java,Spring,Junit,Shiro,Testcase,我有一个使用maven编译并部署在Tomcat7上的Spring应用程序 我试图使用JUnit4实现一些测试用例。我成功地对应用程序的一部分进行了一些测试,但当我想测试使用外部框架的两个部分:Shiro和OIOSAML时,我遇到了编译问题。因为这里没有OIOSAML社区,所以我将重点讨论shiro,但我相信问题的原因是相同的 当我尝试在JUnit测试中加载应用程序上下文时,会出现加载错误(请参阅下一步)。在框架部分中似乎无法加载/找到某些依赖项。以下是一些有用的信息: Shiro例外: org.

我有一个使用maven编译并部署在Tomcat7上的Spring应用程序

我试图使用JUnit4实现一些测试用例。我成功地对应用程序的一部分进行了一些测试,但当我想测试使用外部框架的两个部分:Shiro和OIOSAML时,我遇到了编译问题。因为这里没有OIOSAML社区,所以我将重点讨论shiro,但我相信问题的原因是相同的

当我尝试在JUnit测试中加载应用程序上下文时,会出现加载错误(请参阅下一步)。在框架部分中似乎无法加载/找到某些依赖项。以下是一些有用的信息:

Shiro例外:

org.springframework.beans.factory.BeanCreationException: 
Error creating bean with name 'authorization' defined in class path resource [test-context.xml]: 
Instantiation of bean failed; 
nested exception is org.springframework.beans.BeanInstantiationException: 
Could not instantiate bean class [myPackage.ShiroAuthorization]: 
Constructor threw exception; nested exception is org.apache.shiro.config.ConfigurationException: 
Unable to instantiate class [com.mysql.jdbc.jdbc2.optional.MysqlDataSource] for object named 'ds'.  
Please ensure you've specified the fully qualified class name correctly.
            at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:288)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1035)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:939)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
            at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
            at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294)
            at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225)
            at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
            at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
            at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585)
            at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913)
            at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464)
            at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
            at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
            at myPackage.Test.init(Test.java:30)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
            at java.lang.reflect.Method.invoke(Unknown Source)
            at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
            at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
            at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
            at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:24)
            at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
            at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50)
            at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
            at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
            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)
        Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [myPackage.ShiroAuthorization]: Constructor threw exception; nested exception is org.apache.shiro.config.ConfigurationException: Unable to instantiate class [com.mysql.jdbc.jdbc2.optional.MysqlDataSource] for object named 'ds'.  Please ensure you've specified the fully qualified class name correctly.
            at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:162)
            at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:110)
            at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:280)
            ... 29 more
        Caused by: org.apache.shiro.config.ConfigurationException: Unable to instantiate class [com.mysql.jdbc.jdbc2.optional.MysqlDataSource] for object named 'ds'.  Please ensure you've specified the fully qualified class name correctly.
            at org.apache.shiro.config.ReflectionBuilder.createNewInstance(ReflectionBuilder.java:151)
            at org.apache.shiro.config.ReflectionBuilder.buildObjects(ReflectionBuilder.java:119)
            at org.apache.shiro.config.IniSecurityManagerFactory.buildInstances(IniSecurityManagerFactory.java:161)
            at org.apache.shiro.config.IniSecurityManagerFactory.createSecurityManager(IniSecurityManagerFactory.java:124)
            at org.apache.shiro.config.IniSecurityManagerFactory.createSecurityManager(IniSecurityManagerFactory.java:102)
            at org.apache.shiro.config.IniSecurityManagerFactory.createInstance(IniSecurityManagerFactory.java:88)
            at org.apache.shiro.config.IniSecurityManagerFactory.createInstance(IniSecurityManagerFactory.java:46)
            at org.apache.shiro.config.IniFactorySupport.createInstance(IniFactorySupport.java:123)
            at org.apache.shiro.util.AbstractFactory.getInstance(AbstractFactory.java:47)
            at myPackage.ShiroAuthorization.<init>(ShiroAuthorization.java:31)
            at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
            at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
            at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
            at java.lang.reflect.Constructor.newInstance(Unknown Source)
            at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:147)
            ... 31 more
        Caused by: org.apache.shiro.util.UnknownClassException: Unable to load class named [com.mysql.jdbc.jdbc2.optional.MysqlDataSource] from the thread context, current, or system/application ClassLoaders.  All heuristics have been exhausted.  Class could not be found.
            at org.apache.shiro.util.ClassUtils.forName(ClassUtils.java:148)
            at org.apache.shiro.util.ClassUtils.newInstance(ClassUtils.java:164)
            at org.apache.shiro.config.ReflectionBuilder.createNewInstance(ReflectionBuilder.java:144)
            ... 45 more
OIOSAML异常:

...Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: org/opensaml/xml/ConfigurationException...
测试用例

...
public static ApplicationContext context;
@BeforeClass
public static void  init() throws Exception {
    context = new ClassPathXmlApplicationContext("test-context.xml");
}
我试图使用上下文文件,但没有任何帮助。奇怪的是,我可以成功地测试Tomcat7的连接池,这表明依赖项已正确加载


我提醒您,除了我想用JUnit测试它之外,其他一切都可以工作

尝试使用以下方法注释JUnit测试类:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
    "classpath:/test-context.xml"
})
这将在运行JUnit测试时加载applicationContext


确保应用程序上下文xml位于类路径上。

类路径中是否有mySql驱动程序?可能这就是问题所在。

类路径中是否有mySql驱动程序?如果不是,您可能必须将它添加到pom.xml中,以确保它!。。。当我在tomcat上部署它时,库是从WEB-INF/lib文件夹加载的。显然,JUnit没有。回答一个我能接受的问题。谢谢如果您的Spring加载是正确的,我想您的问题是MysqlDataSource在您的applicationContext中没有被识别为bean。。。试着在test-context.xml中将其定义为bean确实,正如czajek所说的,这就是问题所在。谢谢你的帮助。
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
    "classpath:/test-context.xml"
})