在集成测试中使用 Spring Boot 测试伪造一个 bean

Fake a bean with SpringBoot test on an Integration test

和@MockBean 和@SpyBean 一样,有没有类似@FakeBean / @DummyBean 的东西?

想法是该实例是 100% 真实的(具有预期的生产内部状态)并且它覆盖(或添加 bean,以防它未在配置中声明)上下文中的实例。理想情况下,您不需要创建一个 TestConfiguration class 并将其设置为 Primary,因为这样您就可以在每个测试的基础上控制假的,只有在您需要的时候。否则它使用主要的。

例如,当 bean 是上下文数据收集器时,它非常有用,因此每次测试 MockReset.AFTER 它可能是干净的。

实现此目的最干净的方法是什么。即使我们不是真正的间谍,@SpyBean 是正确的选择吗?

我认为这不是个好主意。自动创建 bean 会产生很大的开销,因为在某些情况下,这个过程会逐步创建整个上下文。最好创建 TestContext 并控制 bean 的创建,因为哪里需要创建真正的 beans,哪里需要创建 mock。如果你创建 mock ,它里面的 beans 将不会被创建并且不需要你的测试上下文,这与自动过程相反。

PS.Spring 有很好的错误解释(与所需的 bean 声明相关)和 @MockBean@SpyBean可以在 class 级别上使用多个 class 声明,以便于快速声明。