如何载荷,在春季启动测试的、基本的春天应用方面增加的唯命名的组件?

0

的问题

原始的

我尝试,在测试一个弹簧引导(v2。3.8)应用程序, 只有名 的组件中的一个 基本 春天应用的上下文。 更具体地说,我想要负载、在测试、弹簧应用程序的情况下,将配置至少记录、装载的外部特性,验证(通过Java验证API),和 @Value-堵塞,但没有视、数据访问用户,等等。 实质上,我要测试的,通过约束的附加说明的界面(例如 @NotBlank), @Service 这一演习只有当地文件系统(无视、数据访问用户或任何其他春天启动测试"片")和拥有一个数据会员填充过 @Value.

我已经试过了,没有用的,许多说明(和他们的一些固有的属性),在不同的组合集:例如: @SpringBootTest, @Configuration, @ContextConfiguration, @TestConfiguration, @TypeExcludeFilters等等。 例如:

@Validated
public interface SomeService {
    String someMethod (@NotBlank String someParam);
}
...
@Service
public class SomeServiceImpl implements SomeService {

    @Value("${some.value}")
    private String someValue;

    @Override
    public String someMethod(String someParam) {
        // do something with local file-system,
        // with someValue in hand, and
        // knowing someParam not blank
    }
}
...
@SpringBootTest(classes={SomeServiceImpl.class},webEnvironment=WebEnvironment.NONE)
class SomeServiceTests {

    @Autowired
    private SomeService someService;

    @Test
    void throwConstraintViolationException_whenSomeParamNil() {
        assertThrows(
            ConstraintViolationException.class,
            ()->someService.someMethod(new String()));
    }
    ...
}

在这个例子中,属性 classes@SpringBootTest 载荷所引用的类,但掩盖了所有的 基本知识 (日志记录,验证,等等)。 我也在寻求。

以下摘录,从Craig墙'"春启动,在行动",似乎 正是 我寻找的,但它的主要工具(@SpringApplicationConfiguration)是现在已经过时(以及其正式建议的更替 @SpringBootTest -不行为同样,至少有关属性 classes):

虽然@ContextConfiguration的一项伟大的工作的加载应用弹簧 上下文,它不载有完整的春季启动的治疗...SpringApplication 不仅加载应用程序方面,而且还能够记录、装载的外 性(应用程序。特性或应用程序。阳明海运),并且其他特征的弹簧 启动。 如果你使用@ContextConfiguration,你不会得到那些特征。 得到那些功能回去在你的一体化测试,你可以交换出@ContextConfiguration春季启动的@SpringApplicationConfiguration:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes=AddressBookConfiguration.class)
public class AddressServiceTests {
...
}

在那里,他得到"完全春季启动的治疗",但加入 的类(@Service)他援引了(不是每 @Component, @Controller@Repository 他的域)。

如何做到这一点今天,没有弃用 @SpringApplicationConfiguration?

更新

我原来说我的(不克雷格的墙')例(即: @SpringBootTest(classes={SomeServiceImpl.class},webEnvironment=WebEnvironment.NONE)虽然它载所引用的类,遮蔽所有的 基础 的应用程序的情况下,弹簧引导通常会的负荷。 通过进一步的试验,我们发现,这一声明是不准确的,即不是 所有 但只有 一些 基本的遮蔽,即验证(执行Java验证API)。 换句话说,记录、装载的外部特性,并@值堵是,事实上,装/配置。 我认为,我必须已经得到了混淆,在所有我的许多排列/尝试。

1

最好的答案

0

之后还没有更多的实验,我已经找到一个答案。 我不能说它是最好的答案,但它是简洁,肯定不会把戏...

import org.springframework.boot.autoconfigure.ImportAutoConfiguration;
import org.springframework.boot.autoconfigure.validation.ValidationAutoConfiguration;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;

// automatically configures validation (implementation of Java Validation API)
@ImportAutoConfiguration(ValidationAutoConfiguration.class)

// obscures/disables any otherwise-automatic web-environment;
// automatically configures logging, loading of external properties, and @Value-plugging;
// and, beyond that, adds to application-context only _cited_ classes/configuration-classes
@SpringBootTest(classes={SomeServiceImpl.class},webEnvironment=WebEnvironment.NONE)// full context loaded, if unqualified

public class SomeServiceTests {
...
}
2021-11-25 08:32:45

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................