Dreamine.FullKit.Tests 1.0.0.0
Dreamine.FullKit.Tests 기능을 검증하는 자동화 테스트 프로젝트입니다.
로딩중...
검색중...
일치하는것 없음
Dreamine.FullKit.Tests.Communication.RabbitMqMessageBusTests 클래스 참조sealed

더 자세히 ...

클래스

class  RabbitMqFixture
class  FakeRabbitMqConnectionFactory
class  FakeRabbitMqConnection
class  FakeRabbitMqChannel
class  FakeRabbitMqBasicProperties

Public 멤버 함수

async Task ConnectAsync_DeclaresConfiguredTopology ()
async Task PublishAsync_UsesMessageRouteAndSerializesEnvelope ()
async Task PublishAsync_UsesConfiguredRoutingKeyWhenMessageRouteIsEmpty ()
async Task SubscribeAsync_BindsRouteConsumesAndAcknowledgesHandledDelivery ()
async Task SubscribeAsync_AllowsMultipleHandlersForSameRoute ()
async Task SubscribeAsync_NacksDeliveryWhenHandlerFails ()
async Task DisconnectAsync_CancelsConsumerAndClosesResources ()

Private 멤버 함수

record PublishedMessage (string Exchange, string RoutingKey, bool Mandatory, FakeRabbitMqBasicProperties Properties, ReadOnlyMemory< byte > Body)

상세한 설명

Rabbit Mq Message Bus Tests 기능과 관련 상태를 캡슐화합니다.

RabbitMqMessageBusTests.cs 파일의 18 번째 라인에서 정의되었습니다.

멤버 함수 문서화

◆ ConnectAsync_DeclaresConfiguredTopology()

async Task Dreamine.FullKit.Tests.Communication.RabbitMqMessageBusTests.ConnectAsync_DeclaresConfiguredTopology ( )
inline

Connect Async Declares Configured Topology 작업을 수행합니다.

반환값
Connect Async Declares Configured Topology 작업에서 생성한 Task 결과입니다.

RabbitMqMessageBusTests.cs 파일의 37 번째 라인에서 정의되었습니다.

38 {
39 var fixture = new RabbitMqFixture(new RabbitMqMessageBusOptions
40 {
41 ExchangeName = "dreamine.exchange",
42 QueueName = "dreamine.queue",
43 RoutingKey = "dreamine.route",
44 ExchangeType = "topic",
45 Durable = true,
46 AutoDelete = true,
47 Exclusive = true
48 });
49
50 await fixture.Bus.ConnectAsync();
51
52 Assert.Equal(ConnectionState.Connected, fixture.Bus.State);
53 Assert.Equal("exchange:dreamine.exchange:topic:True:True", fixture.Channel.Operations[0]);
54 Assert.Equal("queue:dreamine.queue:True:True:True", fixture.Channel.Operations[1]);
55 Assert.Equal("bind:dreamine.queue:dreamine.exchange:dreamine.route", fixture.Channel.Operations[2]);
56 }

다음을 참조함 : Dreamine.FullKit.Tests.Communication.RabbitMqMessageBusTests.RabbitMqFixture.Bus.

◆ DisconnectAsync_CancelsConsumerAndClosesResources()

async Task Dreamine.FullKit.Tests.Communication.RabbitMqMessageBusTests.DisconnectAsync_CancelsConsumerAndClosesResources ( )
inline

Disconnect Async Cancels Consumer And Closes Resources 작업을 수행합니다.

반환값
Disconnect Async Cancels Consumer And Closes Resources 작업에서 생성한 Task 결과입니다.

RabbitMqMessageBusTests.cs 파일의 319 번째 라인에서 정의되었습니다.

320 {
321 var fixture = new RabbitMqFixture(new RabbitMqMessageBusOptions());
322
323 await fixture.Bus.ConnectAsync();
324 await fixture.Bus.SubscribeAsync("route", (_, _) => Task.CompletedTask);
325 await fixture.Bus.DisconnectAsync();
326
327 Assert.Equal(ConnectionState.Disconnected, fixture.Bus.State);
328 Assert.Contains("consumer-1", fixture.Channel.CancelledConsumerTags);
329 Assert.True(fixture.Channel.Closed);
330 Assert.True(fixture.Connection.Closed);
331 }

◆ PublishAsync_UsesConfiguredRoutingKeyWhenMessageRouteIsEmpty()

async Task Dreamine.FullKit.Tests.Communication.RabbitMqMessageBusTests.PublishAsync_UsesConfiguredRoutingKeyWhenMessageRouteIsEmpty ( )
inline

Publish Async Uses Configured Routing Key When Message Route Is Empty 작업을 수행합니다.

반환값
Publish Async Uses Configured Routing Key When Message Route Is Empty 작업에서 생성한 Task 결과입니다.

RabbitMqMessageBusTests.cs 파일의 129 번째 라인에서 정의되었습니다.

130 {
131 var fixture = new RabbitMqFixture(new RabbitMqMessageBusOptions
132 {
133 RoutingKey = "fallback.route"
134 });
135
136 await fixture.Bus.ConnectAsync();
137
138 await fixture.Bus.PublishAsync(new MessageEnvelope { Name = "Rabbit.Publish" });
139
140 Assert.Equal("fallback.route", fixture.Channel.PublishedMessages[0].RoutingKey);
141 }

다음을 참조함 : Dreamine.FullKit.Tests.Communication.RabbitMqMessageBusTests.RabbitMqFixture.Bus.

◆ PublishAsync_UsesMessageRouteAndSerializesEnvelope()

async Task Dreamine.FullKit.Tests.Communication.RabbitMqMessageBusTests.PublishAsync_UsesMessageRouteAndSerializesEnvelope ( )
inline

Publish Async Uses Message Route And Serializes Envelope 작업을 수행합니다.

반환값
Publish Async Uses Message Route And Serializes Envelope 작업에서 생성한 Task 결과입니다.

RabbitMqMessageBusTests.cs 파일의 75 번째 라인에서 정의되었습니다.

76 {
77 var fixture = new RabbitMqFixture(new RabbitMqMessageBusOptions
78 {
79 ExchangeName = "dreamine.exchange",
80 RoutingKey = "fallback.route",
81 PersistentMessages = true
82 });
83
84 await fixture.Bus.ConnectAsync();
85
86 var message = new MessageEnvelope
87 {
88 Name = "Rabbit.Publish",
89 Route = "message.route",
90 Payload = [1, 2, 3],
91 Headers = new Dictionary<string, string> { ["Protocol"] = "RabbitMQ" }
92 };
93
94 await fixture.Bus.PublishAsync(message);
95
96 Assert.Single(fixture.Channel.PublishedMessages);
97
98 var published = fixture.Channel.PublishedMessages[0];
99 var roundTripped = JsonSerializer.Deserialize<MessageEnvelope>(published.Body.Span);
100
101 Assert.Equal("dreamine.exchange", published.Exchange);
102 Assert.Equal("message.route", published.RoutingKey);
103 Assert.True(published.Properties.Persistent);
104 Assert.Equal("application/json", published.Properties.ContentType);
105 Assert.Equal(nameof(MessageEnvelope), published.Properties.Type);
106 Assert.NotNull(roundTripped);
107 Assert.Equal(message.Name, roundTripped.Name);
108 Assert.Equal(message.Route, roundTripped.Route);
109 Assert.Equal(message.Payload, roundTripped.Payload);
110 }

다음을 참조함 : Dreamine.FullKit.Tests.Communication.RabbitMqMessageBusTests.RabbitMqFixture.Bus.

◆ PublishedMessage()

record Dreamine.FullKit.Tests.Communication.RabbitMqMessageBusTests.PublishedMessage ( string Exchange,
string RoutingKey,
bool Mandatory,
FakeRabbitMqBasicProperties Properties,
ReadOnlyMemory< byte > Body )
sealedprivate

Published Message 기능과 관련 상태를 캡슐화합니다.

다음에 의해서 참조됨 : Dreamine.FullKit.Tests.Communication.RabbitMqMessageBusTests.FakeRabbitMqChannel.BasicPublish().

이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ SubscribeAsync_AllowsMultipleHandlersForSameRoute()

async Task Dreamine.FullKit.Tests.Communication.RabbitMqMessageBusTests.SubscribeAsync_AllowsMultipleHandlersForSameRoute ( )
inline

Subscribe Async Allows Multiple Handlers For Same Route 작업을 수행합니다.

반환값
Subscribe Async Allows Multiple Handlers For Same Route 작업에서 생성한 Task 결과입니다.

RabbitMqMessageBusTests.cs 파일의 216 번째 라인에서 정의되었습니다.

217 {
218 var fixture = new RabbitMqFixture(new RabbitMqMessageBusOptions
219 {
220 ExchangeName = "dreamine.exchange",
221 QueueName = "dreamine.queue"
222 });
223 var calls = new List<string>();
224
225 await fixture.Bus.ConnectAsync();
226 await fixture.Bus.SubscribeAsync(
227 "custom.route",
228 (_, _) =>
229 {
230 calls.Add("first");
231 return Task.CompletedTask;
232 });
233 await fixture.Bus.SubscribeAsync(
234 "custom.route",
235 (_, _) =>
236 {
237 calls.Add("second");
238 return Task.CompletedTask;
239 });
240
241 var delivery = new RabbitMqDelivery(
242 13,
243 "custom.route",
244 JsonSerializer.SerializeToUtf8Bytes(new MessageEnvelope
245 {
246 Name = "Rabbit.Receive",
247 Route = "custom.route"
248 }));
249
250 await fixture.Channel.DeliverAsync(delivery);
251
252 Assert.Equal(["first", "second"], calls);
253 Assert.Equal([13UL], fixture.Channel.AckedDeliveryTags);
254 Assert.Empty(fixture.Channel.NackedDeliveryTags);
255 }

◆ SubscribeAsync_BindsRouteConsumesAndAcknowledgesHandledDelivery()

async Task Dreamine.FullKit.Tests.Communication.RabbitMqMessageBusTests.SubscribeAsync_BindsRouteConsumesAndAcknowledgesHandledDelivery ( )
inline

Subscribe Async Binds Route Consumes And Acknowledges Handled Delivery 작업을 수행합니다.

반환값
Subscribe Async Binds Route Consumes And Acknowledges Handled Delivery 작업에서 생성한 Task 결과입니다.

RabbitMqMessageBusTests.cs 파일의 160 번째 라인에서 정의되었습니다.

161 {
162 var fixture = new RabbitMqFixture(new RabbitMqMessageBusOptions
163 {
164 ExchangeName = "dreamine.exchange",
165 QueueName = "dreamine.queue"
166 });
167
168 await fixture.Bus.ConnectAsync();
169
170 MessageEnvelope? handled = null;
171 await fixture.Bus.SubscribeAsync(
172 "custom.route",
173 (message, _) =>
174 {
175 handled = message;
176 return Task.CompletedTask;
177 });
178
179 var delivery = new RabbitMqDelivery(
180 7,
181 "custom.route",
182 JsonSerializer.SerializeToUtf8Bytes(new MessageEnvelope
183 {
184 Name = "Rabbit.Receive",
185 Route = "custom.route",
186 Payload = [9, 8, 7]
187 }));
188
189 await fixture.Channel.DeliverAsync(delivery);
190
191 Assert.NotNull(handled);
192 Assert.Equal("Rabbit.Receive", handled.Name);
193 Assert.Contains("bind:dreamine.queue:dreamine.exchange:custom.route", fixture.Channel.Operations);
194 Assert.Equal("consume:dreamine.queue:False", fixture.Channel.Operations.Last(x => x.StartsWith("consume:", StringComparison.Ordinal)));
195 Assert.Equal([7UL], fixture.Channel.AckedDeliveryTags);
196 Assert.Empty(fixture.Channel.NackedDeliveryTags);
197 }

다음을 참조함 : Dreamine.FullKit.Tests.Communication.RabbitMqMessageBusTests.RabbitMqFixture.Bus.

◆ SubscribeAsync_NacksDeliveryWhenHandlerFails()

async Task Dreamine.FullKit.Tests.Communication.RabbitMqMessageBusTests.SubscribeAsync_NacksDeliveryWhenHandlerFails ( )
inline

Subscribe Async Nacks Delivery When Handler Fails 작업을 수행합니다.

반환값
Subscribe Async Nacks Delivery When Handler Fails 작업에서 생성한 Task 결과입니다.

RabbitMqMessageBusTests.cs 파일의 274 번째 라인에서 정의되었습니다.

275 {
276 var fixture = new RabbitMqFixture(new RabbitMqMessageBusOptions
277 {
278 RequeueOnHandlerError = true
279 });
280
281 await fixture.Bus.ConnectAsync();
282 await fixture.Bus.SubscribeAsync(
283 "failing.route",
284 (_, _) => throw new InvalidOperationException("handler failed"));
285
286 var delivery = new RabbitMqDelivery(
287 11,
288 "failing.route",
289 JsonSerializer.SerializeToUtf8Bytes(new MessageEnvelope
290 {
291 Name = "Rabbit.Receive",
292 Route = "failing.route"
293 }));
294
295 await Assert.ThrowsAsync<InvalidOperationException>(() => fixture.Channel.DeliverAsync(delivery));
296
297 Assert.Equal([11UL], fixture.Channel.NackedDeliveryTags);
298 Assert.True(fixture.Channel.LastNackRequeue);
299 Assert.Empty(fixture.Channel.AckedDeliveryTags);
300 }

다음을 참조함 : Dreamine.FullKit.Tests.Communication.RabbitMqMessageBusTests.RabbitMqFixture.Bus.


이 클래스에 대한 문서화 페이지는 다음의 파일로부터 생성되었습니다.: