一、關於Spring中的測試
在開發過程中開發人員會經常使用到兩種測試方式,單元測試和集成測試
- 單元測試:只針對單一的類或方法,對運行環境沒有依賴
- 集成測試:需要來自不同層的不同對象的交互,如數據庫,網絡連接,ioc容器等
Spring通過Spring TestContext Framework對集成測試提供了頂級的支持
補充: 基於Maven構建的項目結構默認有關於測試的目錄:
測試代碼:src/test/java
測試資源:src/text/resources
二、如何使用Spring提供的測試功能
- 使用@RunWith註解,讓代碼運行於Spring測試環境(@RunWith就是一個運行器,SpringJUnit4ClassRunner.class提供了Spring TestContext Framework的功能)
- 使用@ContextConfiguration註解來配置應用容器
- 使用@ActiveProfiles來確定profile
三、testDemo
實體類
package com.cactus.demo.test;
/**
* Created by liruigao
* Date: 2019-12-09 14:04
* Description:
*/
public class TestDemo {
private String content;
public TestDemo() {
}
public TestDemo(String content) {
this.content = content;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
配置類
package com.cactus.demo.test;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
/**
* Created by liruigao
* Date: 2019-12-09 14:05
* Description:
*/
@Configuration
public class TestConfig {
@Bean
@Profile("dev")
public TestDemo getDevBean() {
return new TestDemo("I am dev testDemo");
}
@Bean
@Profile("prod")
public TestDemo getProdBean() {
return new TestDemo("I am prod testDemo");
}
}
測試運行類
package testdemo;
import com.cactus.demo.test.TestConfig;
import com.cactus.demo.test.TestDemo;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
/**
* Created by liruigao
* Date: 2019-12-09 14:10
* Description:
*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {TestConfig.class})
@ActiveProfiles("prod")
public class DemoTest {
@Autowired
private TestDemo testBean;
@Test
public void test() {
String content = testBean.getContent();
System.out.println(content);
}
}
Result
I am prod testDemo