gpt4 book ai didi

azure - ServiceBusReceivedMessage 的单元测试

转载 作者:行者123 更新时间:2023-12-03 03:48:06 27 4
gpt4 key购买 nike

我的项目是用java编写的,我正在从“com.microsoft.azure:azure-servicebus”迁移到“com.azure:azure-messaging-servicebus”。迁移成功,但我在编写单元测试时遇到问题。我想创建一个 ServiceBusReceivedMessage 对象,但无法这样做。

  1. 此构造函数是私有(private)的。
  2. 一些网站建议使用 - ServiceBusModelFactory 来创建 ServiceBusReceivedMessage 对象,但我在 java SDK 中找不到该对象。
  3. 无法使用简单的模拟来模拟它,因为该类是最终的。

关于如何编写单元测试的任何想法。

最佳答案

谢谢Xie Yijun 。将您的建议作为答案发布以帮助其他社区成员。

使用 Azure SDK 客户端库的客户可以使用 Mockito 模拟服务客户端使用org.mockito.plugins.MockMaker。更多信息可参见Mock the unmockable: opt-in mocking of final classes/methods .

示例代码

public class TelemetryEvents {
private final EventHubConsumerAsyncClient consumerClient;
public TelemetryEvents (EventHubConsumerAsyncClient consumerClient) {
this.consumerClient = consumerClient;
}

public Flux<TelemetryEvent> getEvents() {
return consumerClient.receiveFromPartition("1", EventPosition.latest())
.map(event -> new TelemtetryEvent(event));
}
}

测试代码

import reactor.test.publisher.TestPublisher;
import reactor.test.StepVerifier;

import static com.azure.messaging.eventhubs.*;
import static org.mockito.Mockito.*;

public class TelemetryEventsTest {
@Test
public void canGetEvents() {
// Arrange

// After following the instructions in "Steps" section
EventHubConsumerAsyncClient consumerClient = mock(EventHubConsumerAsyncClient.class);

TestPublisher<EventData> eventsPublisher = TestPublisher.createCold();
eventsPublisher.emit(new EventData("Foo"), new EventData("Bar"));
when(consumerClient.receiveFromPartition(eq("1"), eq(EventPosition.latest())).thenReturn(eventsPublisher.flux());

TelemetryEvents telemetryEvents = new TelemetryEvents(consumerClient);

// Act
StepVerifier.create(telemetryEvents.getEvents())
.assertNext(event -> isMatchingTelemetry(event))
.assertNext(event -> isMatchingTelemetry(event))
.verifyComplete();
}
}

欲了解更多信息,请查看Mocking Final Classes

关于azure - ServiceBusReceivedMessage 的单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68254641/

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