<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Heck's  Blog]]></title> 
<link>https://www.heckjj.com/index.php</link> 
<description><![CDATA[一瞬间的决定，往往可以改变很多，事实上，让自己成功的往往不是知识，是精神！ 如果你总是为自己找借口，那只好让成功推迟。执行力，今天！]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[Heck's  Blog]]></copyright>
<item>
<link>https://www.heckjj.com/post//</link>
<title><![CDATA[SpringBoot单元测试报错“Error creating bean with name ‘serverEndpointExporter‘ ”]]></title> 
<author>Heck &lt;@hecks.tk&gt;</author>
<category><![CDATA[Web开发]]></category>
<pubDate>Tue, 02 Jan 2024 06:48:33 +0000</pubDate> 
<guid>https://www.heckjj.com/post//</guid> 
<description>
<![CDATA[ 
	在SpringBoot中使用单元测试时，出现以下报错，意思是创建名为‘serverEndpointExporter’的bean时出错。<br/>Error starting ApplicationContext. To display the conditions report re-run your application with &#039;debug&#039; enabled.<br/>[20240102 14:42:43][main][ERROR][org.springframework.boot.SpringApplication:854] Application run failed<br/>org.springframework.beans.factory.BeanCreationException: Error creating bean with name &#039;serverEndpointExporter&#039; defined in class path resource [com/nine/rivers/bms/system/config/WebSocketConfig.class]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: javax.websocket.server.ServerContainer not available<br/>&nbsp;&nbsp;at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1804)<br/>&nbsp;&nbsp;at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620)<br/>&nbsp;&nbsp;at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)<br/>&nbsp;&nbsp;at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)<br/>&nbsp;&nbsp;at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)<br/>&nbsp;&nbsp;at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)<br/>&nbsp;&nbsp;at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)<br/>&nbsp;&nbsp;at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:953)<br/>&nbsp;&nbsp;at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)<br/>&nbsp;&nbsp;at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)<br/>&nbsp;&nbsp;at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:765)<br/>&nbsp;&nbsp;at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:445)<br/>&nbsp;&nbsp;at org.springframework.boot.SpringApplication.run(SpringApplication.java:338)<br/>&nbsp;&nbsp;at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:121)<br/>&nbsp;&nbsp;at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99)<br/>&nbsp;&nbsp;at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)<br/>&nbsp;&nbsp;at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:124)<br/>&nbsp;&nbsp;at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)<br/>&nbsp;&nbsp;at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:132)<br/>&nbsp;&nbsp;at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:248)<br/>&nbsp;&nbsp;at org.springframework.test.context.junit.jupiter.SpringExtension.postProcessTestInstance(SpringExtension.java:138)<br/>&nbsp;&nbsp;at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$6(ClassBasedTestDescriptor.java:350)<br/>&nbsp;&nbsp;at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.executeAndMaskThrowable(ClassBasedTestDescriptor.java:355)<br/>&nbsp;&nbsp;at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$invokeTestInstancePostProcessors$7(ClassBasedTestDescriptor.java:350)<br/>&nbsp;&nbsp;at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)<br/>&nbsp;&nbsp;at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:175)<br/>&nbsp;&nbsp;at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1384)<br/>&nbsp;&nbsp;at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:482)<br/>&nbsp;&nbsp;at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472)<br/>&nbsp;&nbsp;at java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:312)<br/>&nbsp;&nbsp;at java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:743)<br/>&nbsp;&nbsp;at java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:742)<br/>&nbsp;&nbsp;at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:580)<br/>&nbsp;&nbsp;at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestInstancePostProcessors(ClassBasedTestDescriptor.java:349)<br/>&nbsp;&nbsp;at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$instantiateAndPostProcessTestInstance$4(ClassBasedTestDescriptor.java:270)<br/>&nbsp;&nbsp;at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)<br/>&nbsp;&nbsp;at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:269)<br/>&nbsp;&nbsp;at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$2(ClassBasedTestDescriptor.java:259)<br/>&nbsp;&nbsp;at java.util.Optional.orElseGet(Optional.java:267)<br/>&nbsp;&nbsp;at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$3(ClassBasedTestDescriptor.java:258)<br/>&nbsp;&nbsp;at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31)<br/>&nbsp;&nbsp;at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:101)<br/>&nbsp;&nbsp;at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)<br/>&nbsp;&nbsp;at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:100)<br/>&nbsp;&nbsp;at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:65)<br/>&nbsp;&nbsp;at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$1(NodeTestTask.java:111)<br/>&nbsp;&nbsp;at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)<br/>&nbsp;&nbsp;at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:111)<br/>&nbsp;&nbsp;at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:79)<br/>&nbsp;&nbsp;at java.util.ArrayList.forEach(ArrayList.java:1259)<br/><br/>问题分析<br/>通过报错提示可以看出，在创建命名为 ‘serverEndpointExporter’ 的bean时出错，而这个bean是webscoket中的，而webscoket是需要依赖tomcat等容器才能启动的，恰巧运行单元测试不需要依赖tomcat容器，两者互相矛盾这就是出现该问题的原因了。<br/><br/>问题解决<br/>使用tomcat容器运行单元测试，在注解 @SpringbootTest 中追加以下内容即可：<br/>@SpringbootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)<br/>
]]>
</description>
</item><item>
<link>https://www.heckjj.com/post//#blogcomment</link>
<title><![CDATA[[评论] SpringBoot单元测试报错“Error creating bean with name ‘serverEndpointExporter‘ ”]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>https://www.heckjj.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>