SSMフレームワーク学習——ユニットテストクラス

7442 ワード

このユニットテスト類といえば、自分の料理が足を引っ張っているような気がします.@Testでいいと思っていたのに、今日hibernate validatorをテストしたとき、間違いを報告しました.No qualifying bean of type'javax.servlet.http.HttpServletRequest’

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(){

		// 
    }
}