SSMフレームワーク学習——ユニットテストクラス
7442 ワード
このユニットテスト類といえば、自分の料理が足を引っ張っているような気がします.@Testでいいと思っていたのに、今日hibernate validatorをテストしたとき、間違いを報告しました.No qualifying bean of type'javax.servlet.http.HttpServletRequest’
理由は以下のとおりです.私はビジネス層で@Autowireを使用してHttpServeretRequestを注入しました.他の人のブログを見てみると、私が書いたテストクラスはspringとspringmvcのプロファイルしか読み取らず、servletに関する構成がないため、@Autowireを使用してHttpServertRequestを注入することはできません.
解決策としては、テストクラスに@WebAppConfiguration注記を付ける
@WebAppConfiguration注記の役割は、classpathではなく、src/main/webappまたは@WebAppConfigurationのvalueパラメータで指定された場所からロードするリソースのロード方法を変更することです.
@WebAppConfiguration注記がない場合、通常classpathにはwebappフォルダが含まれていないため、classpath以外の構成はSpringコンテキストでは使用できません.
クラスのテストに必要な依存はバージョンの問題に注意してください.
@RunWith(SpringJUnit 4 ClassRunner.class)を使用すると、junitバージョンは4.12を下回らない
servletはテストクラスの依存ではありませんが、バージョンが3.0を下回ってはいけないと言いたいだけです.そうしないとjavaを間違えます.lang.NoClassDefFoundError: javax/servlet/SessionCookieConfig
1.問題の背景
理由は以下のとおりです.私はビジネス層で@Autowireを使用してHttpServeretRequestを注入しました.他の人のブログを見てみると、私が書いたテストクラスはspringとspringmvcのプロファイルしか読み取らず、servletに関する構成がないため、@Autowireを使用してHttpServertRequestを注入することはできません.
@Resource
private UserInfoService userInfoService;
@Resource
private HttpServletRequest request;
2.問題解決と原因分析
解決策としては、テストクラスに@WebAppConfiguration注記を付ける
@WebAppConfiguration注記の役割は、classpathではなく、src/main/webappまたは@WebAppConfigurationのvalueパラメータで指定された場所からロードするリソースのロード方法を変更することです.
@WebAppConfiguration注記がない場合、通常classpathにはwebappフォルダが含まれていないため、classpath以外の構成はSpringコンテキストでは使用できません.
3.具体コード
クラスのテストに必要な依存はバージョンの問題に注意してください.
@RunWith(SpringJUnit 4 ClassRunner.class)を使用すると、junitバージョンは4.12を下回らない
servletはテストクラスの依存ではありませんが、バージョンが3.0を下回ってはいけないと言いたいだけです.そうしないとjavaを間違えます.lang.NoClassDefFoundError: javax/servlet/SessionCookieConfig
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>3.0.1version>
<scope>providedscope>
dependency>
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>4.12version>
dependency>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-testartifactId>
<version>5.0.2.RELEASEversion>
dependency>
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml","classpath:springmvc.xml"})
@WebAppConfiguration
public class TestSpring {
//
@Resource(name = "validator")
LocalValidatorFactoryBean validatorFactoryBean;
@Test
public void run(){
//
}
}