Neptune Spring boot starter#
Данный модуль содержит дополнительные авто конфигурации для Spring Boot, предназначенные для тестирования.
<dependency>
<groupId>ru.tinkoff.qa.neptune</groupId>
<artifactId>neptune-spring-boot-starter</artifactId>
<version>${LATEST_RELEASE_OR_BETA_VERSION}</version>
<scope>test</scope>
</dependency>
dependencies {
testImplementation group: 'ru.tinkoff.qa.neptune', name: 'neptune-spring-boot-starter', version: LATEST_RELEASE_OR_BETA_VERSION
}
Является транзитивной зависимостью:
Работа со свойствами тестируемого приложения и 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();
//дальнейшие действия
}
}