Spring Boot Junit测试-ClassNotFoundException

mkuff

我有一个Spring Boot应用程序,可以正常运行。我想编写一些单元测试,并遇到以下异常:

java.lang.IllegalStateException: Failed to load ApplicationContext

    at
org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:125)
    at
org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:108)
    at
org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
    at
org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:83)
    at
org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener.prepareTestInstance(SpringBootDependencyInjectionTestExecutionListener.java:44)
    at
org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:246)
    at
org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:227)    at
org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:289)
    at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at
org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291)
    at
org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:246)
    at
org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)  at
org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)     at
org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)   at
org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)     at
org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)    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.junit.runners.ParentRunner.run(ParentRunner.java:363)    at
org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)   at
com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
    at
com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
    at
com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
    at
com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: org.springframework.beans.factory.BeanCreationException:
Error creating bean with name 'requestMappingHandlerAdapter' defined
in class path resource
[org/springframework/boot/autoconfigure/web/servlet/WebMvcAutoConfiguration$EnableWebMvcConfiguration.class]:
Bean instantiation via factory method failed; nested exception is
org.springframework.beans.BeanInstantiationException: Failed to
instantiate
[org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter]:
Factory method 'requestMappingHandlerAdapter' threw exception; nested
exception is java.lang.NoClassDefFoundError:
net/minidev/json/writer/JsonReaderI     at
org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:587)
    at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1250)
    at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1099)
    at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:541)
    at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:501)
    at
org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317)
    at
org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$123/1758624236.getObject(Unknown
Source)     at
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
    at
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315)
    at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
    at
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:760)
    at
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:869)
    at
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550)
    at
org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:140)
    at
org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759)
    at
org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:395)
    at
org.springframework.boot.SpringApplication.run(SpringApplication.java:327)
    at
org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:138)
    at
org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99)
    at
org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:117)
    ... 25 more Caused by:
org.springframework.beans.BeanInstantiationException: Failed to
instantiate
[org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter]:
Factory method 'requestMappingHandlerAdapter' threw exception; nested
exception is java.lang.NoClassDefFoundError:
net/minidev/json/writer/JsonReaderI     at
org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185)
    at
org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:579)
    ... 44 more Caused by: java.lang.NoClassDefFoundError:
net/minidev/json/writer/JsonReaderI     at
com.jayway.jsonpath.internal.DefaultsImpl.<init>(DefaultsImpl.java:17)
    at
com.jayway.jsonpath.internal.DefaultsImpl.<clinit>(DefaultsImpl.java:15)
    at
com.jayway.jsonpath.Configuration.getEffectiveDefaults(Configuration.java:48)
    at
com.jayway.jsonpath.Configuration.access$000(Configuration.java:34)
    at
com.jayway.jsonpath.Configuration$ConfigurationBuilder.build(Configuration.java:229)
    at
org.springframework.data.web.JsonProjectingMethodInterceptorFactory.<init>(JsonProjectingMethodInterceptorFactory.java:75)
    at
org.springframework.data.web.ProjectingJackson2HttpMessageConverter.initProjectionFactory(ProjectingJackson2HttpMessageConverter.java:87)
    at
org.springframework.data.web.ProjectingJackson2HttpMessageConverter.<init>(ProjectingJackson2HttpMessageConverter.java:72)
    at
org.springframework.data.web.config.SpringDataWebConfiguration.extendMessageConverters(SpringDataWebConfiguration.java:162)
    at
org.springframework.web.servlet.config.annotation.WebMvcConfigurerComposite.extendMessageConverters(WebMvcConfigurerComposite.java:144)
    at
org.springframework.web.servlet.config.annotation.DelegatingWebMvcConfiguration.extendMessageConverters(DelegatingWebMvcConfiguration.java:123)
    at
org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport.getMessageConverters(WebMvcConfigurationSupport.java:758)
    at
org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport.requestMappingHandlerAdapter(WebMvcConfigurationSupport.java:565)
    at
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration.requestMappingHandlerAdapter(WebMvcAutoConfiguration.java:467)
    at
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration$$EnhancerBySpringCGLIB$$c37b1a28.CGLIB$requestMappingHandlerAdapter$8(<generated>)
    at
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration$$EnhancerBySpringCGLIB$$c37b1a28$$FastClassBySpringCGLIB$$2c18252f.invoke(<generated>)
    at
org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
    at
org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:361)
    at
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration$EnableWebMvcConfiguration$$EnhancerBySpringCGLIB$$c37b1a28.requestMappingHandlerAdapter(<generated>)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)  at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)     at
org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154)
    ... 45 more Caused by: java.lang.ClassNotFoundException:
net.minidev.json.writer.JsonReaderI     at
java.net.URLClassLoader.findClass(URLClassLoader.java:381)  at
java.lang.ClassLoader.loadClass(ClassLoader.java:424)   at
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)   at
java.lang.ClassLoader.loadClass(ClassLoader.java:357)   ... 69 more

我想要做的只是测试一个@Service注释的bean,并正确地将其连接起来。

@RunWith(SpringRunner.class)
@SpringBootTest
public class ImageResizeTest {

    @Autowired
    private ImageService imageService;

    @Test
    public void imageResizeTest() throws IOException {
        BufferedImage image = ImageIO.read(new File("E:\\tmp\\original.jpg"));
        imageService.storeComicCover(image, "mytest.jpg");
    }
}

@Service
public class ImageService {
    private static final Logger LOG = LoggerFactory.getLogger(ImageService.class);
    public static final String FORMAT_NAME = "jpg";

    @Value("${image.norm.resize.height}")
    private int normalResizeHeight;
    @Value("${image.norm.resize.width}")
    private int normalResizeWidth;

    @Value("${image.thumb.resize.height}")
    private int thumbResizeHeight;
    @Value("${image.thumb.resize.width}")
    private int thumbResizeWidth;

    @Value("${image.mini.resize.height}")
    private int miniResizeHeight;
    @Value("${image.mini.resize.width}")
    private int miniResizeWidth;

    @Value("${image.comics.original.path}")
    private String originalComicPath;
    @Value("${image.stories.original.path}")
    private String originalStoriesPath;
    @Value("${image.characters.original.path}")
    private String originalCharactersPath;

    @Value("${image.comic.resized.path}")
    private String resizeComicPath;
    @Value("${image.stories.resized.path}")
    private String resizeStoriesPath;
    @Value("${image.characters.resized.path}")
    private String resizeCharactersPath;

    public ImageAttributes storeComicCover(BufferedImage originalImage, String originalImageName) {

我试图用测试范围在maven中添加缺少的lib,但这没有任何效果。

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.1.RELEASE</version>
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.security</groupId>
        <artifactId>spring-security-config</artifactId>
    </dependency>

    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
    </dependency>

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

    <dependency>
        <groupId>commons-validator</groupId>
        <artifactId>commons-validator</artifactId>
        <version>1.6</version>
    </dependency>

    <dependency>
        <groupId>org.imgscalr</groupId>
        <artifactId>imgscalr-lib</artifactId>
        <version>4.2</version>
    </dependency>

    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger2</artifactId>
        <version>2.8.0</version>
    </dependency>
    <dependency>
        <groupId>io.springfox</groupId>
        <artifactId>springfox-swagger-ui</artifactId>
        <version>2.8.0</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <optional>true</optional>
    </dependency>

    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
    </dependency>
</dependencies>

我究竟做错了什么?感谢您的帮助。

St1id3r

@SpringBootTest(classes = {... classesRequired ...}),您可以尝试加载所需的类,并查看它是否可以那样工作。SpringBootTest应该加载所需的应用程序上下文。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Spring Boot在JUnit测试中的Spring JavaMailSenderImpl上的ClassNotFoundException

提供ClassNotFoundException的Spring Boot Maven集成测试

Spring Boot JMX ClassNotFoundException

.ClassNotFoundException Spring Boot 2.0.0

JUnit执行测试的Spring Boot问题

Spring Boot @value变量的JUnit测试

使用 Spring Boot 和 Spring Cloud 的 ClassNotFoundException

带有Selenium ClassNotFoundException的Spring Boot JUnit:org.apache.xml.utils.PrefixResolver

Spring Boot Junit测试安全的应用程序

Spring Boot Junit对putMapping的测试始终返回null

如何在Spring Boot JUnit测试中排除* AutoConfiguration类?

Spring Boot:如何使用@Validated注释在JUnit中测试服务?

在Kotlin和JUnit5中测试Spring Boot缓存

如何使用JUnit在Spring Boot中测试服务层的代码?

在Spring Boot的JUnit测试中创建bean时出错

使用Spring Boot Actuator进行的Junit测试给出异常

在 Spring Boot 中使用 Junit 5 进行测试失败

如何为 spring boot 编写 Junit 测试用例:

Spring Boot JUnit 测试 beanFactory.getBean 空指针异常

Spring Boot非致命错误ClassNotFoundException

Spring Boot useTestClasspath抛出CannotLoadBeanClassException和ClassNotFoundException

Spring Boot 1 和 Gradle:ClassNotFoundException SpringApplicationBuilder

Spring Boot-Junit无法在junit测试中加载配置属性

带有Spring Boot JUnit 5测试的Wiremock:测试运行后正在使用的地址

与Spring Boot的集成测试

Spring Boot 测试容器

Maven验证Spring Boot应用程序类的ClassNotFoundException

Spring Boot-ClassNotFoundException,但是主类存在

Spring RestController + Junit测试