【发布时间】:2019-09-08 10:52:30
【问题描述】:
我正在开发一个 Spring Boot 应用程序。我试图开发一些单元测试。
单元测试必须在没有在容器中启动应用程序的情况下运行,必须非常快以至于可以在没有很多时间的情况下运行。
想象一下我有一个类名ApplicationService,如下:
@Service
public class ApplicationService {
@Autowired
private ApplicationRepository applicationRepository;
@Autowired
private final PasswordEncoder passwordEncoder;
///............
}
及以下测试:
@RunWith(SpringRunner.class)
@TestExecutionListeners(MockitoTestExecutionListener.class)
@ContextConfiguration
public class CreateApplicationTest {
@Autowired
@InjectMocks
ApplicationService applicationService;
@Mock
private ApplicationRepository applicationRepository;
@Before
public void init() {
MockitoAnnotations.initMocks(this);
}
@Test
public void createApplication() {
CreateApplicationDTO dto = new CreateApplicationDTO("some info");
given(this.applicationService.createApplication(dto)).willReturn(null);
ApplicationResultDTO application = applicationService.createApplication(dto);
assertThat(application, is(someValue));
}
}
虽然模拟是正确且有效的(在此示例中 ApplicationService.applicationRepository 是模拟的),但其他 AutoWired 字段(在此示例中 ApplicationService.passwordEncoder)仍然为空。
如何配置测试以将默认实例(来自 bean)应用到其他字段?
【问题讨论】:
标签: spring-boot unit-testing mockito javabeans autowired