我有一个类似于以下代码:
@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。在此示例中,它将仅是存储库和someSearcher 。
我知道我可以使用@BeanMock为bean提供替代实现,但是仍将创建bean的实际实现(尽管未使用)。
有什么建议吗?
答案 0 :(得分:1)
您可以使用@ContextConfiguration
代替@SpringBootTest
为特定类创建自定义Spring上下文。 Spring Boot通过针对特定用例设计的类进一步简化了此过程。 @WebMvcTest
或@DataJdbcTest
。
但是,这种方法有两个主要缺点:
在这个新的受限上下文中,您实际要测试什么?绝对不是生产应用程序,因为您没有启动整个Spring上下文。这可能导致测试遗漏错误,例如可能无法发现Bean覆盖问题。
SpringRunner
将尝试在测试之间重用Spring上下文。当您有多个测试时,一次启动一个大环境并在所有测试中共享它可能会更快。