1

コントローラーレイヤーをテストしたいので、@WebMvcTestアノテーションを使用しました。サーバー全体を起動したくないからです。しかし、コントローラテストを実行すると、テストは常に失敗します。SpringBootで@WebMvcTestを使用する際に、xmlの設定を指定する方法を除外しますか?

@RunWith(SpringRunner.class) 
@WebMvcTest(value = ServiceController.class) 
public class ServiceControllerTest { 

private MockMvc mockMvc; 

@Autowired 
private WebApplicationContext webApplicationContext; 

@MockBean 
private CloudServiceFacade cloudServiceFacade; 

@Before 
public void setUp() throws Exception { 
    this.mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build(); 
} 

@Test 
public void checkRoleExist() throws Exception { 
} 
} 

のようなエラーメッセージの部分:このような私のControllerTestコード

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'redisPoolConfig' defined in class path resource [tools.xml]: Initialization of bean failed; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert property value of type 'java.lang.String' to required type 'int' for property 'maxTotal'; nested exception is java.lang.NumberFormatException: For input string: "${redis.maxTotal}" 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:563) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483) 
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:759) 
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:866) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:542) 
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:761) 
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:371) 
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315) 
at org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:111) 
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:98) 
at org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:116) 
... 28 more 
Caused by: org.springframework.beans.TypeMismatchException: Failed to convert property value of type 'java.lang.String' to required type 'int' for property 'maxTotal'; nested exception is java.lang.NumberFormatException: For input string: "${redis.maxTotal}" 
at org.springframework.beans.AbstractNestablePropertyAccessor.convertIfNecessary(AbstractNestablePropertyAccessor.java:596) 
at org.springframework.beans.AbstractNestablePropertyAccessor.convertForProperty(AbstractNestablePropertyAccessor.java:603) 
at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:216) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1538) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1497) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1237) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:552) 
... 42 more 
Caused by: java.lang.NumberFormatException: For input string: "${redis.maxTotal}" 
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
at java.lang.Integer.parseInt(Integer.java:569) 
at java.lang.Integer.valueOf(Integer.java:766) 
at org.springframework.util.NumberUtils.parseNumber(NumberUtils.java:208) 
at org.springframework.beans.propertyeditors.CustomNumberEditor.setAsText(CustomNumberEditor.java:113) 
at org.springframework.beans.TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:468) 
at org.springframework.beans.TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:441) 
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:199) 
at org.springframework.beans.AbstractNestablePropertyAccessor.convertIfNecessary(AbstractNestablePropertyAccessor.java:576) 
... 48 more 

は、私は自分のアプリケーションでは(私はSpringBootを使用)、私はブートストラップクラスを持っているので、これは、エラーメッセージを理解することができますアプリケーションの入り口です。このような ブートストラップクラス:

@SpringBootApplication(scanBasePackages = {"com.netease.permission"}) 
@ImportResource("classpath:applicationContext.xml") 
public class Bootstrap { 
public static void main(String[] args) { 
    SpringApplication.run(Bootstrap.class); 
} 
} 

それは外部のXMLインポート:applicationContext.xmlをして、applicationContext.xmlを下記である:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans  http://www.springframework.org/schema/beans/spring-beans.xsd"> 

<import resource="database.xml" /> 
<import resource="tools.xml" /> 
<import resource="dubbo-service.xml" /> 
<import resource="spring-mvc.xml" /> 

</beans> 

問題は、私は全体のApplicationContextをインポートしたくないです.xml、それはmysql \ redis \ zkなどの余分なリソースの依存関係を定義します。 spring-mvc.xmlにのみあります。私はspring-mvc.xmlでインターセプタを定義します。私は、私のServiceControllerTestに迎え入れのコントローラ&をテストします。

@TestConfiguration( "classpath:spring-mvc.xml")を追加しました。私はspring-mvc.xml設定をインポートしたいだけであるが、動作しません。

誰も私の状況に遭遇しますか?

答えて

0

src/test/resourceフォルダに同じファイル名の空のスプリングコンテキストファイルを置くだけです。これは、元のものを上書きする必要があります。

関連する問題