Следующий код является стандартным методом для записи теста JUnit для контроллера Mvc.Контроллер тестовой пружины Mvc и ввод статического класса
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = ApplicationTestCassandra.class)
@WebAppConfiguration
public class TestControllerTests {
@Autowired
private WebApplicationContext webApplicationContext;
private MockMvc mockMvc;
@Before
public void setup() throws Exception {
this.mockMvc = webAppContextSetup(webApplicationContext).build();
}
@Test
public void testupTimeStart() throws Exception {
this.mockMvc.perform(get("/uptime"))
.andExpect(status().isOk());
}
}
Это прекрасно работает, но я хотел бы заменить класс с автоподготовкой специальным классом для тестирования. Класс CassandraSimpleConnection вводится через @Autowired в моем контроллере. Я пробовал несколько подходов, но не повезло. Следующий код выходит из строя из-за ошибки Mvc 404, так как я предполагаю, что мое приложение с интерфейсом REST не работает вообще.
@RunWith(SpringJUnit4ClassRunner.class)
//ApplicationTestCassandra is SpringBoot application startpoint class with @SpringBootApplication annotation
//@ContextConfiguration(classes = ApplicationTestCassandra.class, loader = AnnotationConfigContextLoader.class)
@ContextConfiguration(loader = AnnotationConfigWebContextLoader.class)//, classes = {ApplicationTestCassandra.class})
@WebAppConfiguration
public class TestControllerTests {
@Service
@EnableWebMvc
@ComponentScan(basePackages={"blabla.functionalTests"})
static class CassandraSimpleConnection {
public Metadata testConnection(TestConfiguration configuration) {
Metadata metadata = null;
// return metadata;
throw new RuntimeException("Could not connect to any server");
}
}
Если я использую
@ContextConfiguration(loader = AnnotationConfigWebContextLoader.class, classes = {ApplicationTestCassandra.class})
CassandraSimpleConnection не замещается с моим статическим классом.
Может ли кто-нибудь помочь мне, пожалуйста? Документация об аннотациях довольно запутанна.
И зачем это. Это сервис, а не конфигурация, поэтому он никогда не будет обнаружен. Также добавление '@ EnableWebMvc' и' @ ComponentScan' в класс, не принадлежащий '@ Configuration', довольно бесполезно. –
Хорошо, спасибо. Как заменить класс службы при выполнении теста? Каков самый простой способ издеваться над CassandraSimpleConnection? Должен ли я высмеивать com.datastax.driver.core.Cluster? – Johannes
Вы можете использовать @Bean для CassandraSimpleConnection для «переопределения» вашего компонента в тестовом примере –