#spring #spring-data-jpa #spring-data #cucumber-junit #cucumber-spring
#spring #spring-data-jpa #spring-данные #cucumber-junit #cucumber-spring
Вопрос:
Я пытался создать автоматический тест, в котором я мог бы запрашивать у базы данных статус заказа, который я создаю с помощью пользовательского интерфейса (Appium) на устройстве (Android или IOS).
Я хотел бы выполнить crud с базой данных, используя spring jpa, поскольку мне сказали, что это лучшая практика.
Я пытался это реализовать, но при объявлении объекта репозитория он всегда достигает null, поэтому он никогда не использует метод репозитория, который я создал. У меня есть следующая последовательность.
Бегун (JUnit) -> Функция (Корнишон) —> Определения шагов —> Шаги.
OrderWithouUsingDelayOptionCashiOSTest.java (Бегун)
import io.cucumber.junit.Cucumber;
import io.cucumber.junit.CucumberOptions;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
@RunWith(Cucumber.class)
@SpringBootTest
@CucumberOptions(
plugin = {"pretty", "com.rappi.setup.reports.TestListener"},
features = {"classpath:com/rappi/features/orders/order_restaurant_ios.feature"},
glue = {"com.rappi.glue.hooks", "com.rappi.definitions"},
tags = "@iOSTest and @Cash")
public class OrderWithoutUsingDelayOptionCashiOSTest {}
order_restaurant_ios.feature
#language: es
@iOSTest @After-restaurant-order @AfterLogoutMS
Característica: Crear orden SIN usar la opción del delay ¿Quieres Modificar algo? con diferentes metodos de pago - iOS
Antecedentes: Autenticacion del usuario y creacion de carrito por ms
Dado que el proceso de autenticacion del usuario se completo en el pais de: Colombia
Y que se tiene el producto 810017633 de la tienda 900102662 agregado en canasta
.
.
.
Other things
LoginRappiDefinition.java (определения шагов)
@Cuando("^que el proceso de autenticacion del usuario se completo en el pais de: (.*)$")
public void completeUserLogin(String country) {
loginRappiStep.selectLocationCountry(country);
}
LoginRappiStep.java (Шаг).
В этом классе объект OrderRepository всегда достигает null, поэтому он никогда не вызывает метод «getOne (order)».
public class LoginRappiStep {
@Autowired public OrderRepository orderRepository;
public void selectLocationCountry() {
long order = 5019023;
Order orderEntity = orderRepository.getOne(order);
}
}
Order.java (Сущность)
import javax.persistence.*;
@Entity
@Table(name = "orders")
public class Order {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column private String state;
public Order(Long id, String state) {
this.id = id;
this.state = state;
}
public Long getId() {
return id;
}
public Order setId(Long id) {
this.id = id;
return this;
}
public String getState() {
return state;
}
public Order setState(String state) {
this.state = state;
return this;
}
}
OrderRepository.java
import com.rappi.entities.Order;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
public interface OrderRepository extends JpaRepository<Order, Long> {
Optional<Order> findById(Long id);
Order getOne(Long id);
}
build.gradle
dependencies {
testCompile group: 'org.springframework.boot', name: 'spring-boot-starter-test', version: '2.3.4.RELEASE'
compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version: '2.3.4.RELEASE'
compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.3.4.RELEASE'
}
application.properties
spring.datasource.driver-class-name=org.postgresql.Driver
spring.datasource.url=jdbc:postgresql://postgres-core-orders.dev.com:5432/grability
spring.datasource.username=sa
spring.datasource.password=sa
Кто-нибудь знает, что еще я должен делать, что я упускаю из виду?
Это не проект spring, это обычный java-проект.
Я ценю любую помощь, которую вы можете мне оказать.
Ответ №1:
Вы аннотировали неправильный класс @SpringBootTest
. Попробуйте:
package com.rappi.config
import org.springframework.boot.test.context.SpringBootTest;
import io.cucumber.spring.CucumberContextConfiguration;
@CucumberContextConfiguration
@SpringBootTest
public class CucumberSpringConfiguration {
}
И убедитесь, что CucumberSpringConfiguration
он находится на пути склеивания, добавив его в:
glue = {"com.rappi.config", "com.rappi.glue.hooks", "com.rappi.definitions"},
Cucumber использует Springs TestContextManager
. Класс, аннотированный с @CucumberContextConfiguration
помощью, будет использоваться для создания контекста тестового приложения. Таким образом, любые другие аннотации, которые вы добавите CucumberSpringConfiguration
, также будут подобраны Spring.
Смотрите: https://github.com/cucumber/cucumber-jvm/blob/main/spring /
Комментарии:
1. Вы также можете найти пример здесь: github.com/RedFroggy/spring-cucumber-rest-api