Neptune Spring boot starter#

Данный модуль содержит дополнительные авто конфигурации для Spring Boot, предназначенные для тестирования.

Добавить в maven/dependencies#
     <dependency>
         <groupId>ru.tinkoff.qa.neptune</groupId>
         <artifactId>neptune-spring-boot-starter</artifactId>
         <version>${LATEST_RELEASE_OR_BETA_VERSION}</version>
         <scope>test</scope>
     </dependency>
Добавить в build.gradle#
 dependencies {
     testImplementation  group: 'ru.tinkoff.qa.neptune', name: 'neptune-spring-boot-starter', version: LATEST_RELEASE_OR_BETA_VERSION
 }

Является транзитивной зависимостью:

API

Работа со свойствами тестируемого приложения и Neptune#

Данный модуль предоставляет доступ Neptune к настройкам Spring-приложения, дефолтным либо настройкам активного в данный момент профиля приложения.

Подробнее:

# Настройка базового URI HTTP-клиента 
# указанная в переменных окружения или в файлах 
# neptune.global.properties или neptune.properties,
# значение которой строится с использованием значения server.port - 
# стандартного свойства Spring
END_POINT_OF_TARGET_API = http://127.0.0.1:${server.port}/

Так же есть возможность менять значения свойств Neptune непосредственно в тесте, используя стандартные механизмы Spring Boot Test, если в этом есть необходимость.

package org.my.pack;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import static org.testng.AssertJUnit.assertEquals;
import static ru.tinkoff.qa.neptune.core.api.properties
    .general.events.CapturedEvents.FAILURE;
import static ru.tinkoff.qa.neptune.core.api.properties
    .general.events.DoCapturesOf.DO_CAPTURES_OF_INSTANCE;

//DO_CAPTURES_OF - это стандартное свойство Neptune, которое описывает,
//когда следует делать аттачи для логов и тест-репортов 
// (успешные шаги, неуспешные, или во всех случаях).
//В данном примере мы указали, что в данном тесте следует 
// делать аттачи для неуспешных шагов
@SpringBootTest(properties = { "DO_CAPTURES_OF=FAILURE" })
public class MyBootTest {

  @Test
  public void test() {
    assertEquals(DO_CAPTURES_OF_INSTANCE.get(), FAILURE);
  }
}

Если для тестирования используется не Junit5#

Для Junit 5 ничего особенного делать не надо, чтобы писать тесты. Написание тестов для Spring-приложений с использованием TestNg имеет некоторую особенность, которую необходимо учесть, чтобы поддержать корректную работу со свойствами.

package org.my.pack;

import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.testng.AbstractTestNGSpringContextTests;
import org.testng.annotations.Test;
import ru.tinkoff.qa.neptune.spring.boot.starter
    .test.TestWithKnownCurrentApplicationContext;

@SpringBootTest(properties = {"example.firstProperty=annotation"})
public class MyBootTest2 extends AbstractTestNGSpringContextTests
        //нужно просто имплементить
        implements TestWithKnownCurrentApplicationContext { //этот интерфейс

  @Test
  public void test() {
  }
}

Получение текущего контекста приложения#

Иногда может возникнуть необходимость иметь доступ до активного в данный момент контекста приложения.

package org.my.pack;

import org.springframework.context.ApplicationContext;

import static ru.tinkoff.qa.neptune.spring.boot.starter
    .application.contexts
    .CurrentApplicationContextTestExecutionListener.getCurrentApplicationContext;

public class SomeClass {
    
  public void someMethod() {
      ApplicationContext context = getCurrentApplicationContext();
      //дальнейшие действия
  }
}