Немного странно, что я почесал голову за последние несколько дней. У меня есть репозиторий JPA, который вводится в поле класса обслуживания. Отлично работает при запуске сервера и отправке запроса через клиента, но когда код выполняется с помощью интеграционных тестов, класс внедренного поля (CustomerRepository) всегда равен null.
Я пробовал различные советы через inte rnet но я не нашел аналогичного сценария для моего, любая помощь будет высоко ценится
Класс обслуживания
@GRpcService
public class CustomerService extends CustomerServiceGrpc.CustomerServiceImplBase {
@Autowired
private CustomerRepository repository;
@Override
public void createCustomer(CreateCustomerRequest request, StreamObserver<CreateCustomerResponse> responseObserver) {
final CustomerDao convertedDao = ProtoToDaoConverter.convertCustomerRequestProtoToCustomerDao(request);
repository.save(convertedDao);
responseObserver.onNext(CreateCustomerResponse.newBuilder().setSuccess(true).build());
responseObserver.onCompleted();
}
}
Интеграционный тест
@ExtendWith(SpringExtension.class)
@SpringBootTest
public class CustomerServiceIT {
@Rule
private final GrpcCleanupRule grpcCleanup = new GrpcCleanupRule();
@Test
public void something() throws IOException {
String serverName = InProcessServerBuilder.generateName();
// Create a server, add service, start, and register for automatic graceful shutdown.
grpcCleanup.register(InProcessServerBuilder
.forName(serverName).directExecutor().addService(new CustomerService()).build().start());
customerServiceGrpc.CustomerServiceBlockingStub blockingStub = CustomerServiceGrpc.newBlockingStub(
// Create a client channel and register for automatic graceful shutdown.
grpcCleanup.register(InProcessChannelBuilder.forName(serverName).directExecutor().build()));
final CreateCustomerRequest request = CreateCustomerRequest.newBuilder().setFirstName("Simon").setSecondName("Brown").setRole("Product Developer").build();
final CreateCustomerResponse response = blockingStub.createCustomer(request);
}
}