From 0f573d5ef79aa84127a070e4c5bfd71bd27ace1c Mon Sep 17 00:00:00 2001 From: yangxiaodong Date: Wed, 19 Jul 2017 15:47:42 +0800 Subject: [PATCH] add unit tests of Dispatcher. --- .../Processor/DefaultDispatcherTest.cs | 93 +++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 test/DotNetCore.CAP.Test/Processor/DefaultDispatcherTest.cs diff --git a/test/DotNetCore.CAP.Test/Processor/DefaultDispatcherTest.cs b/test/DotNetCore.CAP.Test/Processor/DefaultDispatcherTest.cs new file mode 100644 index 0000000..7ff1d19 --- /dev/null +++ b/test/DotNetCore.CAP.Test/Processor/DefaultDispatcherTest.cs @@ -0,0 +1,93 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading; +using System.Threading.Tasks; +using DotNetCore.CAP.Infrastructure; +using DotNetCore.CAP.Models; +using DotNetCore.CAP.Processor; +using DotNetCore.CAP.Processor.States; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using Moq; +using Xunit; + +namespace DotNetCore.CAP.Test +{ + public class DefaultDispatcherTest + { + private CancellationTokenSource _cancellationTokenSource; + private ProcessingContext _context; + private IServiceProvider _provider; + private Mock _mockStorageConnection; + private Mock _mockQueueExecutorFactory; + private Mock _mockQueueExecutor; + + public DefaultDispatcherTest() + { + _mockStorageConnection = new Mock(); + _mockQueueExecutorFactory = new Mock(); + _mockQueueExecutor = new Mock(); + _mockQueueExecutorFactory.Setup(x => x.GetInstance(MessageType.Publish)).Returns(_mockQueueExecutor.Object); + _cancellationTokenSource = new CancellationTokenSource(); + + var services = new ServiceCollection(); + services.AddTransient(); + services.AddLogging(); + services.Configure>(x => { }); + services.AddOptions(); + services.AddSingleton(_mockStorageConnection.Object); + services.AddSingleton(_mockQueueExecutorFactory.Object); + _provider = services.BuildServiceProvider(); + + _context = new ProcessingContext(_provider, _cancellationTokenSource.Token); + } + + [Fact] + public void MockTest() + { + Assert.NotNull(_provider.GetServices()); + } + + [Fact] + public async void ProcessAsync_CancellationTokenCancelled_ThrowsImmediately() + { + // Arrange + _cancellationTokenSource.Cancel(); + var fixture = Create(); + + // Act + await Assert.ThrowsAsync(() => fixture.ProcessAsync(_context)); + } + + [Fact] + public async Task ProcessAsync() + { + // Arrange + var job = new CapPublishedMessage { + + }; + + var mockFetchedJob = Mock.Get(Mock.Of(fj => fj.MessageId == 42 && fj.MessageType == MessageType.Publish )); + + _mockStorageConnection + .Setup(m => m.FetchNextMessageAsync()) + .ReturnsAsync(mockFetchedJob.Object).Verifiable(); + + _mockQueueExecutor + .Setup(x => x.ExecuteAsync(_mockStorageConnection.Object, mockFetchedJob.Object)) + .Returns(Task.FromResult(OperateResult.Success)); + + var fixture = Create(); + + // Act + await fixture.ProcessAsync(_context); + + // Assert + _mockStorageConnection.VerifyAll(); + } + + private DefaultDispatcher Create() + => _provider.GetService(); + } +} \ No newline at end of file