如何模拟AWSXRay以便在Junit中测试Java代码

klr1opcd  于 2022-11-08  发布在  Java
关注(0)|答案(1)|浏览(205)

I have a code that begins the subsegment. Subsegment subsegment = AWSXRay.beginSubsegment("makeHTTPCall function");
So I tried mocking it out as Mockito.mock(AWSXRay): I see an exception below: what is wrong here? com.amazonaws.xray.exceptions.SegmentNotFoundException: Failed to begin subsegment named 'makeHTTPCall function': segment cannot be found. at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) at com.amazonaws.xray.strategy.RuntimeErrorContextMissingStrategy.contextMissing(RuntimeErrorContextMissingStrategy.java:32) at com.amazonaws.xray.contexts.ThreadLocalSegmentContext.beginSubsegment(ThreadLocalSegmentContext.java:40) at com.amazonaws.xray.AWSXRayRecorder.beginSubsegment(AWSXRayRecorder.java:616) at com.amazonaws.xray.AWSXRay.beginSubsegment(AWSXRay.java:121) at com.it.TestAwsXrayHandlerRefactored.makeHTTPCall(TestAwsXrayHandlerRefactored.java:87) at com.it.TestAwsXrayHandlerRefactored.handleRequest(TestAwsXrayHandlerRefactored.java:51) at com.learnit.TestAwsXrayHandlerRefactoredTest.testHandleRequest(TestAwsXrayHandlerRefactoredTest.java:58) at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) at java.base/java.util.ArrayList.forEach(ArrayList.java:1541)

dsekswqp

dsekswqp1#

要避免此错误,您只需在JUnit BeforeEach语句中以AWSXRay.beginSegment("test")开始一个段,然后在JUnit AfterEach语句中以AWSXRay.clearTraceContext()清除跟踪上下文。
或者,您可以在每个单元测试中启动一个段,并将X射线记录仪设置为在Before语句中具有no-op行为,如我们所做的那样:https://github.com/aws/aws-xray-sdk-java/blob/9b724620c126b05313f4c97d18853bbb469e9ba5/aws-xray-recorder-sdk-apache-http/src/test/java/com/amazonaws/xray/proxies/apache/http/TracedResponseHandlerTest.java#L37
但这可能是一个更复杂的选择。

相关问题