簡體   English   中英

在 Spring Junit 5 測試中減少或刪除 @Autowired 注釋的數量

[英]Reduce amount of or remove @Autowired annotations In Spring Junit 5 test

在 Junit 5 中是否可以在沒有 @Autowired 注釋的情況下將 spring bean 注入測試 class 中? 我的代碼如下所示:

@SpringBootTest(classes = SomeApp.class)
@ExtendWith(SpringExtension.class)
public class SomeTest {
    @Autowired
    private SomeService someService

    @Test
    public void shouldMakeMagic() { ....

我想刪除所有 @Autowired 注釋

Kotlin 的優點是您可以在構造函數上聲明成員字段,而在 Java 中不能這樣做。 在 Java 中,您可以創建@Autowired構造函數,但它不會減少樣板,因為您仍然必須在 class 中聲明 class 成員。

但是,如果您願意使用神奇的 Java 樣板代碼刪除器 Project Lombok,您可以實現類似的效果,請參見下面的示例和注釋:

@SpringBootTest
@ExtendWith(SpringExtension.class)
// Below will generate you the constuctor for each final member
// and add @Autowired on it so resulting:
// @Autowired
// public SomeTest(SomeService someService, SomeOtherService someOtherService)    
// {
//    this.someService = someServive;
//    this.someOtherService = someOtherServive;
// }
@RequiredArgsConstructor(onConstructor = @__({@Autowired}))
public class SomeTest {

    private final SomeService someService;
    private final SomeOtherService someOtherService;

    @Test
    public void shouldMakeMagic() {
        assertNotNull(someService);
        assertNotNull(someOtherService);
    }
    
}

現在不同的是,雖然 Kotlin 自動從構造函數生成成員,但 Java 和 Lombok 從成員生成構造函數。

注意:這當然也適用於主要代碼,而不僅僅是測試。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM