【问题标题】:How to mock AWSXRay in order to test Java code in Junit如何模拟 AWSXRay 以在 Junit 中测试 Java 代码
【发布时间】:2022-06-13 03:26:11
【问题描述】:

我有一个开始子段的代码。 Subsegment subsegment = AWSXRay.beginSubsegment("makeHTTPCall function");

所以我尝试将其模拟为 Mockito.mock(AWSXRay): 我在下面看到一个异常:这里有什么问题? com.amazonaws.xray.exceptions.SegmentNotFoundException:无法开始名为“makeHTTPCall 函数”的子段:找不到段。 在 java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:490) 在 com.amazonaws.xray.strategy.RuntimeErrorContextMissingStrategy.contextMissing(RuntimeErrorContextMissingStrategy.java:32) 在 com.amazonaws.xray.contexts.ThreadLocalSegmentContext.beginSubsegment(ThreadLocalSegmentContext.java:40) 在 com.amazonaws.xray.AWSXRayRecorder.beginSubsegment(AWSXRayRecorder.java:616) 在 com.amazonaws.xray.AWSXRay.beginSubsegment(AWSXRay.java:121) 在 com.it.TestAwsXrayHandlerRefactored.makeHTTPCall(TestAwsXrayHandlerRefactored.java:87) 在 com.it.TestAwsXrayHandlerRefactored.handleRequest(TestAwsXrayHandlerRefactored.java:51) 在 com.learnit.TestAwsXrayHandlerRefactoredTest.testHandleRequest(TestAwsXrayHandlerRefactoredTest.java:58) 在 java.base/java.util.ArrayList.forEach(ArrayList.java:1541) 在 java.base/java.util.ArrayList.forEach(ArrayList.java:1541)

【问题讨论】:

    标签: java unit-testing mockito aws-xray


    【解决方案1】:

    为避免此错误,您只需在 JUnit BeforeEach 语句中以 AWSXRay.beginSegment("test") 开始一个段,然后在 JUnit AfterEach 语句中使用 AWSXRay.clearTraceContext() 清除跟踪上下文。

    或者,您可以在每个单元测试中开始一个段,并设置配置您的 X 射线记录仪,使其在您的 Before 语句中具有无操作行为,就像我们一样: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

    但这可能是一个更复杂的选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多