nit tests refactoring

This commit is contained in:
ngfrolov 2022-12-05 08:47:00 +05:00
parent b05aadccb4
commit 85b99135e6

View File

@ -1,20 +1,20 @@
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Moq; using Moq;
using System; using System;
using AsbCloudInfrastructure.Services.Background; using AsbCloudInfrastructure.Background;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
using Xunit; using Xunit;
namespace AsbCloudWebApi.Tests.ServicesTests namespace AsbCloudWebApi.Tests.ServicesTests
{ {
public class BackgroundWorkerServiceTest public class BackgroundWorkerTest
{ {
private readonly Mock<IServiceProvider> mockServiceProvider; private readonly Mock<IServiceProvider> mockServiceProvider;
private readonly Mock<IServiceScopeFactory> mockServiceScopeFactory; private readonly Mock<IServiceScopeFactory> mockServiceScopeFactory;
private readonly Func<string, IServiceProvider, CancellationToken, Task> someAction = (string id, IServiceProvider scope, CancellationToken token) => Task.CompletedTask; private readonly Func<string, IServiceProvider, CancellationToken, Task> someAction = (string id, IServiceProvider scope, CancellationToken token) => Task.CompletedTask;
public BackgroundWorkerServiceTest() public BackgroundWorkerTest()
{ {
var mockServiceScope = new Mock<IServiceScope>(); var mockServiceScope = new Mock<IServiceScope>();
mockServiceScopeFactory = new Mock<IServiceScopeFactory>(); mockServiceScopeFactory = new Mock<IServiceScopeFactory>();
@ -32,20 +32,20 @@ namespace AsbCloudWebApi.Tests.ServicesTests
{ {
mockServiceScopeFactory.Invocations.Clear(); mockServiceScopeFactory.Invocations.Clear();
var backgroundService = new BackgroundWorkerService(mockServiceProvider.Object); var BackgroundWorker = new BackgroundWorker(mockServiceProvider.Object);
const string work1Id = "long name 1"; const string work1Id = "long name 1";
const string work2Id = "long name 2"; const string work2Id = "long name 2";
var work1 = new WorkBase(work1Id, someAction); var work1 = new WorkBase(work1Id, someAction);
var work2 = new WorkPeriodic(work2Id, someAction, TimeSpan.Zero); var work2 = new WorkPeriodic(work2Id, someAction, TimeSpan.Zero);
backgroundService.Push(work1); BackgroundWorker.Push(work1);
backgroundService.Push(work2); BackgroundWorker.Push(work2);
Assert.True(backgroundService.Contains(work1Id)); Assert.True(BackgroundWorker.Contains(work1Id));
Assert.True(backgroundService.Contains(work2Id)); Assert.True(BackgroundWorker.Contains(work2Id));
Assert.False(backgroundService.Contains(work2Id + work1Id)); Assert.False(BackgroundWorker.Contains(work2Id + work1Id));
Assert.False(backgroundService.Contains(string.Empty)); Assert.False(BackgroundWorker.Contains(string.Empty));
} }
[Fact] [Fact]
@ -53,10 +53,10 @@ namespace AsbCloudWebApi.Tests.ServicesTests
{ {
mockServiceScopeFactory.Invocations.Clear(); mockServiceScopeFactory.Invocations.Clear();
var backgroundService = new BackgroundWorkerService(mockServiceProvider.Object); var BackgroundWorker = new BackgroundWorker(mockServiceProvider.Object);
var work = new WorkBase("", someAction); var work = new WorkBase("", someAction);
backgroundService.Push(work); BackgroundWorker.Push(work);
await backgroundService.StartAsync(CancellationToken.None); await BackgroundWorker.StartAsync(CancellationToken.None);
await Task.Delay(10); await Task.Delay(10);
mockServiceScopeFactory.Verify(f => f.CreateScope()); mockServiceScopeFactory.Verify(f => f.CreateScope());
@ -65,15 +65,15 @@ namespace AsbCloudWebApi.Tests.ServicesTests
[Fact] [Fact]
public async Task Makes_primary_work_done() public async Task Makes_primary_work_done()
{ {
var backgroundService = new BackgroundWorkerService(mockServiceProvider.Object); var BackgroundWorker = new BackgroundWorker(mockServiceProvider.Object);
var workDone = false; var workDone = false;
var work = new WorkBase("", (_, _, _) => var work = new WorkBase("", (_, _, _) =>
{ {
workDone = true; workDone = true;
return Task.CompletedTask; return Task.CompletedTask;
}); });
backgroundService.Push(work); BackgroundWorker.Push(work);
await backgroundService.StartAsync(CancellationToken.None); await BackgroundWorker.StartAsync(CancellationToken.None);
await Task.Delay(10); await Task.Delay(10);
Assert.True(workDone); Assert.True(workDone);
@ -82,10 +82,10 @@ namespace AsbCloudWebApi.Tests.ServicesTests
[Fact] [Fact]
public async Task Sets_ExecutionTime_after_work_done() public async Task Sets_ExecutionTime_after_work_done()
{ {
var backgroundService = new BackgroundWorkerService(mockServiceProvider.Object); var BackgroundWorker = new BackgroundWorker(mockServiceProvider.Object);
var work = new WorkBase("", someAction); var work = new WorkBase("", someAction);
backgroundService.Push(work); BackgroundWorker.Push(work);
await backgroundService.StartAsync(CancellationToken.None); await BackgroundWorker.StartAsync(CancellationToken.None);
await Task.Delay(10); await Task.Delay(10);
Assert.True(work.ExecutionTime > TimeSpan.Zero); Assert.True(work.ExecutionTime > TimeSpan.Zero);
@ -94,7 +94,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests
[Fact] [Fact]
public async Task Makes_periodic_work_done() public async Task Makes_periodic_work_done()
{ {
var backgroundService = new BackgroundWorkerService(mockServiceProvider.Object); var BackgroundWorker = new BackgroundWorker(mockServiceProvider.Object);
var workDone = false; var workDone = false;
var work = new WorkPeriodic("", (_, _, _) => var work = new WorkPeriodic("", (_, _, _) =>
{ {
@ -102,8 +102,8 @@ namespace AsbCloudWebApi.Tests.ServicesTests
return Task.CompletedTask; return Task.CompletedTask;
}, },
TimeSpan.FromMilliseconds(10)); TimeSpan.FromMilliseconds(10));
backgroundService.Push(work); BackgroundWorker.Push(work);
await backgroundService.StartAsync(CancellationToken.None); await BackgroundWorker.StartAsync(CancellationToken.None);
await Task.Delay(20); await Task.Delay(20);
Assert.True(workDone); Assert.True(workDone);
@ -112,7 +112,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests
[Fact] [Fact]
public async Task Does_not_start_periodic_work() public async Task Does_not_start_periodic_work()
{ {
var backgroundService = new BackgroundWorkerService(mockServiceProvider.Object); var BackgroundWorker = new BackgroundWorker(mockServiceProvider.Object);
var workDone = false; var workDone = false;
var work = new WorkPeriodic("", (_, _, _) => var work = new WorkPeriodic("", (_, _, _) =>
{ {
@ -123,9 +123,9 @@ namespace AsbCloudWebApi.Tests.ServicesTests
{ {
LastStart = DateTime.Now LastStart = DateTime.Now
}; };
backgroundService.Push(work); BackgroundWorker.Push(work);
await backgroundService.StartAsync(CancellationToken.None); await BackgroundWorker.StartAsync(CancellationToken.None);
await Task.Delay(20); await Task.Delay(20);
Assert.False(workDone); Assert.False(workDone);
@ -152,11 +152,11 @@ namespace AsbCloudWebApi.Tests.ServicesTests
return Task.CompletedTask; return Task.CompletedTask;
}); });
var backgroundService = new BackgroundWorkerService(mockServiceProvider.Object); var BackgroundWorker = new BackgroundWorker(mockServiceProvider.Object);
backgroundService.Push(work2); BackgroundWorker.Push(work2);
backgroundService.Push(work1); BackgroundWorker.Push(work1);
await backgroundService.StartAsync(CancellationToken.None); await BackgroundWorker.StartAsync(CancellationToken.None);
await Task.Delay(2_100); await Task.Delay(2_100);
Assert.True(work2Order < work1Order); Assert.True(work2Order < work1Order);
@ -174,12 +174,12 @@ namespace AsbCloudWebApi.Tests.ServicesTests
return Task.CompletedTask; return Task.CompletedTask;
}, TimeSpan.FromMilliseconds(1)); }, TimeSpan.FromMilliseconds(1));
var backgroundService = new BackgroundWorkerService(mockServiceProvider.Object); var BackgroundWorker = new BackgroundWorker(mockServiceProvider.Object);
backgroundService.Push(work1); BackgroundWorker.Push(work1);
backgroundService.Push(work2); BackgroundWorker.Push(work2);
backgroundService.Delete("1"); BackgroundWorker.Delete("1");
await backgroundService.StartAsync(CancellationToken.None); await BackgroundWorker.StartAsync(CancellationToken.None);
await Task.Delay(10); await Task.Delay(10);
Assert.True(workDone); Assert.True(workDone);
@ -188,7 +188,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests
[Fact] [Fact]
public async Task Aborts_long_work() public async Task Aborts_long_work()
{ {
var backgroundService = new BackgroundWorkerService(mockServiceProvider.Object); var BackgroundWorker = new BackgroundWorker(mockServiceProvider.Object);
var workCanceled = false; var workCanceled = false;
var work = new WorkBase("", async (_, _, token) => await Task.Delay(1000000, token)) var work = new WorkBase("", async (_, _, token) => await Task.Delay(1000000, token))
{ {
@ -200,8 +200,8 @@ namespace AsbCloudWebApi.Tests.ServicesTests
} }
}; };
backgroundService.Push(work); BackgroundWorker.Push(work);
await backgroundService.StartAsync(CancellationToken.None); await BackgroundWorker.StartAsync(CancellationToken.None);
await Task.Delay(20 * 4); await Task.Delay(20 * 4);
Assert.True(workCanceled); Assert.True(workCanceled);
@ -210,7 +210,7 @@ namespace AsbCloudWebApi.Tests.ServicesTests
[Fact] [Fact]
public async Task Execution_continues_after_work_exception() public async Task Execution_continues_after_work_exception()
{ {
var backgroundService = new BackgroundWorkerService(mockServiceProvider.Object); var BackgroundWorker = new BackgroundWorker(mockServiceProvider.Object);
var work2done = false; var work2done = false;
var work1 = new WorkBase("1", (_, _, _) => throw new Exception()); var work1 = new WorkBase("1", (_, _, _) => throw new Exception());
var work2 = new WorkBase("2", (_, _, _) => var work2 = new WorkBase("2", (_, _, _) =>
@ -219,10 +219,10 @@ namespace AsbCloudWebApi.Tests.ServicesTests
return Task.CompletedTask; return Task.CompletedTask;
}); });
backgroundService.Push(work1); BackgroundWorker.Push(work1);
backgroundService.Push(work2); BackgroundWorker.Push(work2);
await backgroundService.StartAsync(CancellationToken.None); await BackgroundWorker.StartAsync(CancellationToken.None);
await Task.Delay(2_100); await Task.Delay(2_100);
Assert.True(work2done); Assert.True(work2done);
@ -234,11 +234,11 @@ namespace AsbCloudWebApi.Tests.ServicesTests
var work1 = new WorkPeriodic("1", someAction, TimeSpan.FromSeconds(30)); var work1 = new WorkPeriodic("1", someAction, TimeSpan.FromSeconds(30));
var work2 = new WorkBase("1", someAction); var work2 = new WorkBase("1", someAction);
var backgroundService = new BackgroundWorkerService(mockServiceProvider.Object); var BackgroundWorker = new BackgroundWorker(mockServiceProvider.Object);
backgroundService.Push(work1); BackgroundWorker.Push(work1);
Assert.Throws<ArgumentException>( Assert.Throws<ArgumentException>(
() => backgroundService.Push(work2)); () => BackgroundWorker.Push(work2));
} }
} }
} }