测试类中@ContextConfiguration和@Import的区别

问题描述 投票:0回答:1

我目前正在研究spring注解@ContextConfiguration的用途 我想知道 @Import 注释有什么区别。

事实上,当我使用这些片段时..

@ExtendWith(SpringExtension.class)
@Import({SpringService.class,SpringService2.class})
public class Snippet1 {

    @Autowired
    SpringService springService;

    @Autowired
    SpringService2 springService2;

    @Test
    public void test() {
        Assertions.assertNotNull(springService);
        Assertions.assertNotNull(springService2);
    }
}

或者这个..

@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = {SpringService.class,SpringService2.class})
public class Snippet2 {

    @Autowired
    SpringService springService;

    @Autowired
    SpringService2 springService2;

    @Test
    public void test() {
        Assertions.assertNotNull(springService);
        Assertions.assertNotNull(springService2);
    }
}

一模一样! 适合度是多少?

谢谢。

spring testing annotations
1个回答
0
投票

在您使用的示例中,它们的行为是相同的。导入注释允许您将多个配置类组合在一起:https://docs.spring.io/spring-framework/reference/core/beans/java/composition-configuration-classes.html#beans-java-using-import

您的 Snippet2 示例可以使用带有 @Import 注释的类:

@ExtendWith(SpringExtension.class)
@ContextConfiguration(classes = {Snippet1 .class})
public class Snippet2 {

    @Autowired
    SpringService springService;

    @Autowired
    SpringService2 springService2;

    @Test
    public void test() {
        Assertions.assertNotNull(springService);
        Assertions.assertNotNull(springService2);
    }
}

以这种方式使用 @Import 可以让您不必重复定义 ContextConfiguration 中相同的类列表。您还希望使用 @Configuration 注释来标记它,而不使用 @ExtendsWith 注释,因为您只是使用它来定义配置:

@Configuration
@Import({SpringService.class,SpringService2.class})
public class Snippet1 {
}

Spring 的文档非常棒,我建议您阅读我发布的链接。

© www.soinside.com 2019 - 2024. All rights reserved.