spring 單元測試方法及其錯誤整理

spring 單元測試及其錯誤整理

目錄:java

  • NO1 spring單元測試方法
    - NO1.1 pom.xml文件中確認有下面依賴
    - NO1.2 在須要測試的類上,或者新建的測試類上添加註解
    - NO1.3 註解說明
  • NO2 spirng單元測試錯誤整理
    - NO2.1 java.lang.IllegalStateException: Failed to load ApplicationContext
    - NO2.2 java.lang.NoSuchMethodError: org.springframework.util.Assert.notNull
    - NO2.3 The import org.springframework.test.context.junit4.SpringJUnit4ClassRunner cannot be resolved

NO1 spring 單元測試方法

NO1.1 pom.xml文件中確認有下面的依賴

<!-- servlet -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <!--spring單元測試依賴 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <!--確保版本與其餘spring開頭的依賴相同 -->
            <version>5.0.6.RELEASE</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <!--確保版本與其餘spring開頭的依賴相同 -->
            <version>5.0.6.RELEASE</version>
        </dependency>

NO1.2 在須要測試的類上,或者新建的測試類上添加註解

package com.authrization;

import com.authrization.dao.RoleDao;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;

/**
 * @author weicong
 * @data 2018/6/1 12:02
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:config/spring*.xml"})
@WebAppConfiguration
public class TestBBB {

    @Autowired
    RoleDao roleDao;

    @Test
    public void testddd(){

        System.out.println(roleDao.listRoles());
    }
}

NO1.3 註解說明

(1)若是 @ContextConfiguration 有多個xml文件能夠這樣寫web

@ContextConfiguration(locations = {"classpath*:config/spring-context*.xml","classpath*:config/spring-mvc.xml"})

(2)有些web項目中不用加 @WebAppConfiguration 也能夠運行單元測試spring


NO2 spirng 單元測試錯誤整理

NO2.1 java.lang.IllegalStateException: Failed to load ApplicationContext


可能緣由:
(1)缺少 servlet-api 依賴bootstrap

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.0</version>
            <scope>provided</scope>
        </dependency>

(2)測試類上缺少 @WebAppConfiguration 註解api

NO2.2 java.lang.NoSuchMethodError: org.springframework.util.Assert.notNull


可能緣由:
(1)spirng-test 依賴版本與spring全家桶(spring-core、spring-beans、spring-web等等)的依賴版本相差太大,儘可能保持spring系列依賴版本所有相同
參看:
https://stackoverflow.com/questions/28013452/could-not-load-testcontextbootstrapper-spring-unit-testing
spring-mvc

(2)重複的依賴mvc

NO2.3 java.lang.NoClassDefFoundError: org/springframework/core/ErrorCoded


可能緣由:
(1)缺少 spring-core 依賴app

NO2.3 The import org.springframework.test.context.junit4.SpringJUnit4ClassRunner cannot be resolved

緣由:maven依賴指定了在test範圍才生效
解決:去掉 test maven

相關文章
相關標籤/搜索