Интеграционные тесты терпят неудачу с тестом gradle, но проходят с IDE - PullRequest
0 голосов
/ 08 мая 2020

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

UsersControllerTest > getOneUser() FAILED
    java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:132
        Caused by: org.springframework.jdbc.datasource.init.ScriptStatementFailedException at ScriptUtils.java:626
            Caused by: org.h2.jdbc.JdbcSQLIntegrityConstraintViolationException at DbException.java:459

Я использую Юпитер для тестов. Вышеупомянутое исключение, на мой взгляд, указывает на скрипт data. sql, который я должен заполнить некоторыми данными. Мне кажется, что с точки зрения синтаксиса это нормально, также он работает нормально, это означает, что записи создаются при тестировании с почтальоном:

INSERT INTO AUTHORITY (ID_AUTHORITY,AUTHORITY) VALUES (1,'USER');
INSERT INTO AUTHORITY (ID_AUTHORITY,AUTHORITY) VALUES (2,'MODERATOR');
INSERT INTO AUTHORITY (ID_AUTHORITY,AUTHORITY) VALUES (3,'ADMIN');
INSERT INTO USER (USER_ID,FIRST_NAME,LAST_NAME,ID,PASSWORD,EMAIL,EMAIL_VERIFIED,ACCOUNT_NON_EXPIRED,ACCOUNT_NON_LOCKED,ENABLED,CREDENTIALS_NON_EXPIRED)
VALUES (1,'Alisher','Urunov','b006c568-a79b-4c28-a06c-df7d89579e00','$2y$12$vLPHTGSDyNWBdH.zxuJgfeiExUwh3zT3Cgj8ZZzW.38rDNK/yBJtm','urunov.alisher@some.com',TRUE,TRUE,TRUE,TRUE,TRUE);
INSERT INTO USER (USER_ID,FIRST_NAME,LAST_NAME,ID,PASSWORD,EMAIL,EMAIL_VERIFIED,ACCOUNT_NON_EXPIRED,ACCOUNT_NON_LOCKED,ENABLED,CREDENTIALS_NON_EXPIRED)
VALUES (2,'Ralf','Tester','b006c568-a79b-123s-a06c-df7d89579e00','$2a$10$3D8eyR7FouUb3RjKoVd9r.pBa7wZbOCe4BeIgxJmJmT9kbYGU43qC','ralf@gmail.com',FALSE,TRUE,TRUE,TRUE,TRUE);
INSERT INTO USER (USER_ID,FIRST_NAME,LAST_NAME,ID,PASSWORD,EMAIL,EMAIL_VERIFIED,ACCOUNT_NON_EXPIRED,ACCOUNT_NON_LOCKED,ENABLED,CREDENTIALS_NON_EXPIRED)
VALUES (3,'Ronald','The Great','b006c568-a79b-123s-1248-df7d89579e00','$2a$10$l9jefOjW/P0/dYH.MkHO8OJkNc7SN/G4ZOK1Lk9ND0x08Yta9hJrq','roland.theGreat@gmail.com',TRUE,TRUE,TRUE,TRUE,TRUE);
INSERT INTO USER_AUTHORITY (ID_USER,ID_AUTHORITY) VALUES (1,1);
INSERT INTO USER_AUTHORITY (ID_USER,ID_AUTHORITY) VALUES (1,2);
INSERT INTO USER_AUTHORITY (ID_USER,ID_AUTHORITY) VALUES (1,3);
INSERT INTO USER_AUTHORITY (ID_USER,ID_AUTHORITY) VALUES (3,1);

Также подумал о возможных проблемах конфигурации с загрузкой Spring, поэтому я добавил jdb c начальные зависимости от gradle.build, но он все равно не работает.

Вот часть теста:

@ExtendWith(SpringExtension.class)
@SpringBootTest(classes = UserServiceApplication.class,webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ContextConfiguration(classes = UserServiceApplication.class)
@DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD)
class UsersControllerTest {

  private String adminToken;
  private String userToken;

  @Autowired TestRestTemplate restTemplate;
  @Autowired TokenUtils tokenUtils;

  @BeforeEach
  void setUp() {
   userToken = tokenUtils.generateTokenForUser(user());
   adminToken = tokenUtils.generateTokenForUser(admin());
  }

  @Test
  void getOneUser() {
    HttpHeaders headers = new HttpHeaders();
    headers.add("Authorization", "Bearer "+adminToken);
    headers.add("Access-Control-Expose-Headers", "Authorization");
    ResponseEntity<UserModel> result =
        restTemplate.exchange(
            "/users/userInfo", HttpMethod.GET, new HttpEntity<>(headers), UserModel.class);
    assertEquals("awesome@gmail.com", result.getBody().getEmail());
  }

1 Ответ

0 голосов
/ 15 мая 2020

Похоже, что у меня в проекте было две зависимости

1) Sring-boot-starter-test 2) Я добавил кучу зависимостей jupiter с mockito 3 *

Они противоречили. Убрал вторую, вроде теперь все работает.

...