Предположим, что у меня есть тестовая конфигурация с несколькими Spring-компонентами, которые на самом деле смоделированы, и я хочу указать поведение этих макетов в наборе тестов JUnit.
@Profile("TestProfile")
@Configuration
@EnableTransactionManagement
@ComponentScan(basePackages = {
"some.cool.package.*"})
public class IntegrationTestConfiguration {
@Bean
@Primary
public Cool cool() {
return Mockito.mock(Cool.class);
}
}
// ...
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
@ActiveProfiles("TestProfile")
public class CoolIntegrationTest {
private final Cool cool;
@Autowired
public CoolIntegrationTest(Cool cool) {
this.cool = cool;
}
@Test
public void testCoolBehavior {
when(cool.calculateSomeCoolStuff()).thenReturn(42);
// etc
}
}
Если я запускаю этот тест, яполучит:
java.lang.Exception: Test class should have exactly one public zero-argument constructor
Я знаю обходной путь, как использовать поля Autowired в тестах, но мне интересно есть ли способ использовать аннотацию Autowired в тестах JUnit?