原始的
我尝试,在测试一个弹簧引导(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)。 换句话说,记录、装载的外部特性,并@值堵是,事实上,装/配置。 我认为,我必须已经得到了混淆,在所有我的许多排列/尝试。