过去几天我一直在挠头,有点奇怪。我有一个 JPA 存储库,它被现场注入(inject)到服务类中。当运行服务器并通过客户端发送请求时,它工作得很好,但是当通过集成测试执行代码时,字段注入(inject)类(CustomerRepository)始终为空。
我通过互联网尝试了各种建议,但没有找到与我类似的情况,任何帮助将不胜感激
服务等级
@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);
}
}
最佳答案
在测试中您调用 new CustomerService()
。您自己创建一个对象,而不是通过 spring。我想你应该在测试类中创建一个字段
@Autowired private final CustomerService customerService
并传入
grpcCleanup.register(InProcessServerBuilder
.forName(serverName).directExecutor().addService(customerService).build().start());
关于java - 通过集成测试执行生产代码时@Autowired 字段为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60186874/