IllegalStateException
MyBatis-SpringプロジェクトをJUnitテストしようとするとスローされます。
問題は、 MyBatis Mapper Beansの自動配線にあるようです(MyBatis-Spring-JUnitのセットアップ全体に慣れていないので、専門用語はご容赦ください)。私は他の誰かからセットアップを継承しました。他に役立つ情報があれば教えてください。
以下に説明するセットアップは、すべてをWebサービスとして公開するときに機能します。しかし、JUnitでテストしようとすると失敗します。テスト中にマッパーを自動配線するにはどうすればよいですか?
設定
main/javaの下
- 永続性フォルダー:ProductMapper.java
- サービスフォルダ:ProductService.java
- wsフォルダー:BrowserService.java
- ws / implフォルダー:BrowserServiceImpl.java
メイン/リソースの下
- 永続性フォルダー:ProductMapper.xml
BrowserService.java
class BrowserServiceImpl {
private ProductService productService;
// setters and getters
// Methods
}
ProductService.java
class ProductService {
@Autowired
private ProductMapper productMapper;
// Methods
}
Context.xml
<beans>
<bean id="browserSvc" class="com.comp.team.proj.ws.impl.BrowserServiceImpl">
<property name="productService" ref="productService" />
</bean>
<!-- MyBatis Config -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.comp.team.proj.persistence" />
<property name="annotationClass" value="org.springframework.stereotype.Repository"/>
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@xxx.xxx.xxx.com:xxxx:xxx"/>
<property name="username" value="myusername"/>
<property name="password" value="mypassword"/>
</bean>
<!-- Other beans -->
</beans>
例外がどのように見えるか知りたい場合:
java.lang.IllegalStateException: Failed to load ApplicationContext
...
Caused by: org.springframework.beans.factory.BeanCreationException:
Could not autowire field: private com.comp.team.proj.persistence.ProductMapper
com.comp.team.proj.service.ProductService.productMapper;
nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException:
No matching bean of type [com.comp.team.proj.persistence.ProductMapper]
found for dependency:
expected at least 1 bean which qualifies as autowire candidate for this
dependency.
...
編集
上記の更新のdataSourceBeanを参照してくださいContext.xml
。構成は正しいように見えますか?
1つの問題はdataSourceの設定にあるようです。JUnitテストが実行されるため、この仮定を行いますが、例外がスローされます。したがって、JUnitのセットアップではない可能性があります。dataSourceの設定が正しい場合、MyBatisはマッパーBeanを正常にインスタンス化し、自動配線は成功します。
テストファイル
@ContextConfiguration
@RunWith(SpringJUnit4ClassRunner.class)
public class ProductCountTest {
@Autowired
protected BrowserService browserSvc;
@Test
public void testGetProductCount() {
long count = browserSvc.getProductCount();
assertTrue(count > 0);
}
}
Context.xml
正しいディレクトリに配置したので、問題なくファイルが見つかります。