如何在Spring测试中排除存储库?

时间:2016-04-07 05:22:04

标签: spring unit-testing spring-boot

我正在为使用CrudRepository的Controller编写测试。通常,我想通过使用模拟而不是实际的存储库实例来隔离单元测试。但是,Spring不断注入实际的Repository代理,我不知道如何有效地排除它们。

我的单元测试看起来像:

@SpringApplicationConfiguration(TestConfiguration)
@WebAppConfiguration
class ControllerSpec extends Specification {
    ...
}

配置如下:

@Configuration
@ComponentScan
@EnableAutoConfiguration
class TestConfiguration {

    @Bean
    AccountRepository accountRepository() {
        mock(AccountRepository)
    }

}

我尝试用@NoRepositoryBean注释配置类,但它没有用。我还尝试使用正则表达式类型在excludeFilters中使用ComponentScan,但它也无效。

2 个答案:

答案 0 :(得分:0)

您需要在控制器顶部使用@InjectMock注释,并在存储库中使用@Mock注释。

@RunWith(MockitoJUnitRunner.class)
public class AccountControllerTest {

@InjectMocks
AccountController controller;

@Mock
AccountRepository accountRepository;
}

答案 1 :(得分:0)

@EnableAutoConfiguration注释具有excludes属性,允许用户忽略某些自动配置功能。其中大多数由相应的*AutoConfiguration类表示。特别是为了绕过存储库,可以从自动配置中排除以下内容:

  • HibernateJpaAutoConfiguration
  • DataSourceAutoConfiguration
  • JpaRepositoriesAutoConfiguration

我不确定它们的哪个组合是绝对最小值,但对它们进行反复试验应该相对容易。