Тест весенней загрузки без подключения к базе данных - PullRequest
0 голосов
/ 11 апреля 2020

Сначала у меня была следующая аннотация над моим тестовым классом:

@RunWith(SpringRunner.class)
@SpringBootTest(classes = Application.class)
@AutoConfigureMockMvc

При такой конфигурации он пытается подключиться к моей базе данных, которая выдаст мне эту ошибку, если моя база данных не работает:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)

Я бы хотел, чтобы мой тест выполнялся без какого-либо подключения к базе данных, поэтому я попытался изменить аннотации, поэтому мой тестовый класс теперь выглядит так:

@RunWith(SpringRunner.class)
@DataJpaTest
@WebMvcTest(CitizenController.class)
@AutoConfigureMockMvc
public class CitizenControllerTest {

@Autowired
private MockMvc mockMvc;

@MockBean
private CitizenRepository citizenRepository;

@MockBean
private WeeklyCareRepository weeklyCareRepository;

@MockBean
private SubCategoryCareRepository subCategoryCareRepository;

@Autowired
private ObjectMapper objectMapper;

private static List<Citizen> mockCitizenList;

private String citizenJson;

Однако , Теперь я получаю еще одну ошибку:

java.lang.IllegalStateException: Configuration error: found multiple declarations of @BootstrapWith for test class [controllers.CitizenControllerTest]: [@org.springframework.test.context.BootstrapWith(value=class org.springframework.boot.test.context.SpringBootTestContextBootstrapper), @org.springframework.test.context.BootstrapWith(value=class org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTestContextBootstrapper)]

Возможно ли запустить мой тест без подключения к базе данных? Если так, что я делаю неправильно / отсутствует?

1 Ответ

0 голосов
/ 11 апреля 2020

Вы можете просто смоделировать метод, который будет подключаться к базе данных в вашем классе репозитория, в методе @Test.

@SpringBootTest
@AutoConfigureMockMvc
class StoreApplicationTests {

    @Autowired
    private MockMvc mockMvc;

    @MockBean
    private CitizenRepository citizenRepository;


    @Test
    void contextLoads() {
    }

    @Test
    public void test() {

        Mockito.when(citizenRepository.getDataFromDB()).thenReturn("Something you'd like to Return");

    }

}

После того, как после этого, citizenRepository.getDataFromDB () не будет подключаться к базе данных, когда она вызывается .


Обновление после вашего комментария:

Затем вы можете просто создать «src / test / resources» и скопировать ваш application.properties или application.yml из «src / main / resources». "к этому каталогу и прокомментируйте часть соединения mysql.

Если у вас нет" src / test / resources / application.properties ", то spring будет читать" src / main / resources / application. properties "по умолчанию и настройте проект в соответствии с этим файлом, поскольку у вас есть конфигурация источника данных, Spring попытается подключиться к базе данных, если сервер базы данных не работает, вы получите сбой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...