0

我有一个类似于以下的代码:

@RunWith(SpringRunner.class)
@SpringBootTest
public class ModelRunnerTest {

    @Autowired
    private SomeRepository repository;

    @Autowired
    private SomeSearcher someSearcher;


    @Test
    public void test(){
        someSearcher.search(repository);
    }
}

它可以工作 - 但也会在与 2 个创建的 bean 相同的上下文中创建所有 bean。这可能需要很长时间(并且我每次构建/部署都运行此测试)。

所以,我想找到一种方法让测试只加载测试所需的bean。在此示例中,它将仅是repository 和 someSearcher

我知道我可以使用 @BeanMock 为 bean 提供替代实现,但仍将创建 bean 的实际实现(尽管未使用)。

有什么建议么?

4

1 回答 1

1

您可以使用@ContextConfiguration而不是@SpringBootTest为特定类创建自定义 Spring 上下文。Spring Boot 通过为特定用例设计的类(例如@WebMvcTest@DataJdbcTest.

然而,这种方法有两个主要缺点:

  1. 你在这个新的有限环境下实际测试什么?绝对不是生产应用程序,因为您没有启动整个 Spring 上下文。这可能会导致测试遗漏错误,例如可能无法发现 bean 覆盖问题。

  2. SpringRunner如果可能,将尝试在测试之间重用 Spring 上下文。当您有多个测试时,一次启动一个大上下文并在所有测试中共享它可能会更快。

于 2018-11-15T10:28:05.067 回答