我正在为使用CrudRepository
的Controller编写测试。通常,我想通过使用模拟而不是实际的存储库实例来隔离单元测试。但是,Spring不断注入实际的Repository代理,我不知道如何有效地排除它们。
我的单元测试看起来像:
@SpringApplicationConfiguration(TestConfiguration)
@WebAppConfiguration
class ControllerSpec extends Specification {
...
}
配置如下:
@Configuration
@ComponentScan
@EnableAutoConfiguration
class TestConfiguration {
@Bean
AccountRepository accountRepository() {
mock(AccountRepository)
}
}
我尝试用@NoRepositoryBean
注释配置类,但它没有用。我还尝试使用正则表达式类型在excludeFilters
中使用ComponentScan
,但它也无效。
答案 0 :(得分:0)
您需要在控制器顶部使用@InjectMock注释,并在存储库中使用@Mock注释。
@RunWith(MockitoJUnitRunner.class)
public class AccountControllerTest {
@InjectMocks
AccountController controller;
@Mock
AccountRepository accountRepository;
}
答案 1 :(得分:0)
@EnableAutoConfiguration
注释具有excludes
属性,允许用户忽略某些自动配置功能。其中大多数由相应的*AutoConfiguration
类表示。特别是为了绕过存储库,可以从自动配置中排除以下内容:
HibernateJpaAutoConfiguration
DataSourceAutoConfiguration
JpaRepositoriesAutoConfiguration
我不确定它们的哪个组合是绝对最小值,但对它们进行反复试验应该相对容易。