在Spring Boot 2.1 Gradle專案使用JUnit 5測試框架的設定如下。
注意,從Spring Boot 2.2版本開始spring-boot-starter-test
預設已經是JUnit 5,就無需再進行以下設定。請參考Spring Boot 2.2 Release Notes。
在Gradle配置檔(Configuration file) build.gradle
設定以下。
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web' // Spring Boot Web
testImplementation ('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'junit', module: 'junit' // 排除JUnit 4的依賴
}
// JUnit 5 依賴設定
testImplementation 'org.junit.jupiter:junit-jupiter-api' // JUnit 5 API 介面
testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine' // JUnit 5 測試框架的實作
}
test {
useJUnitPlatform() // 指明使用JUnit 5來測試
}
本範例的Spring Boot版本為2.1.7.RELEASE
,其spring-boot-starter-test
預設是依賴JUnit 4,所以設定了exclude
排除對JUnit 4的傳遞依賴(Transitive dependencies)。
testImplementation
用來引入測試用的依賴。
testRuntimeOnly
用來引入測試執行期間(runtime)時的依賴。
useJUnitPlatform()
是指明用JUnit 5的JUnit Platform來測試。
下面是簡單的Spring Boot JUnit 5的簡單範例。注意要引用正確的Annotation。
被測試類別DemoServiceA
。
DemoServiceA
package com.abc.demo.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class DemoServiceA {
@Autowired
private DemoServiceB demoServiceB;
public int addInt(int a, int b) {
return demoServiceB.add(a, b);
}
}
測試類別DemoServiceATests
。
DemoServiceATests
package com.abc.demo.service;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.mockito.Mockito.when;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.test.context.junit.jupiter.SpringExtension;
@ExtendWith(SpringExtension.class)
@SpringBootTest
public class DemoServiceATests {
@Autowired
private DemoServiceA demoServiceA;
@MockBean
private DemoServiceB demoServiceB;
@Test
public void testAddInt() {
int a = 1;
int b = 2;
when(demoServiceB.add(a, b)).thenReturn(3);
int actual = demoServiceA.addInt(a, b);
int expected = 3;
assertEquals(expected, actual);
}
}
參考:
沒有留言:
張貼留言