gpt4 book ai didi

java - 通过集成测试执行生产代码时@Autowired 字段为 null

转载 作者:行者123 更新时间:2023-12-01 18:29:28 24 4
gpt4 key购买 nike

过去几天我一直在挠头,有点奇怪。我有一个 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com