diff --git a/CleanArchitecture.Api/CleanArchitecture.Api.csproj b/CleanArchitecture.Api/CleanArchitecture.Api.csproj index 14b1895..46e1257 100644 --- a/CleanArchitecture.Api/CleanArchitecture.Api.csproj +++ b/CleanArchitecture.Api/CleanArchitecture.Api.csproj @@ -9,15 +9,15 @@ - - - - + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive - - + + diff --git a/CleanArchitecture.Application.Tests/CleanArchitecture.Application.Tests.csproj b/CleanArchitecture.Application.Tests/CleanArchitecture.Application.Tests.csproj index 895e978..225be5b 100644 --- a/CleanArchitecture.Application.Tests/CleanArchitecture.Application.Tests.csproj +++ b/CleanArchitecture.Application.Tests/CleanArchitecture.Application.Tests.csproj @@ -9,9 +9,9 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CleanArchitecture.Application.Tests/Fixtures/Queries/QueryHandlerBaseFixture.cs b/CleanArchitecture.Application.Tests/Fixtures/Queries/QueryHandlerBaseFixture.cs index 2d995f8..63c7502 100644 --- a/CleanArchitecture.Application.Tests/Fixtures/Queries/QueryHandlerBaseFixture.cs +++ b/CleanArchitecture.Application.Tests/Fixtures/Queries/QueryHandlerBaseFixture.cs @@ -1,32 +1,26 @@ using CleanArchitecture.Domain.Interfaces; using CleanArchitecture.Domain.Notifications; -using Moq; +using NSubstitute; namespace CleanArchitecture.Application.Tests.Fixtures.Queries; public class QueryHandlerBaseFixture { - public Mock Bus { get; } = new(); + public IMediatorHandler Bus { get; } = Substitute.For(); public QueryHandlerBaseFixture VerifyExistingNotification(string key, string errorCode, string message) { - Bus.Verify( - bus => bus.RaiseEventAsync( - It.Is( - notification => + Bus.Received(1).RaiseEventAsync(Arg.Is(notification => notification.Key == key && notification.Code == errorCode && - notification.Value == message)), - Times.Once); + notification.Value == message)); return this; } public QueryHandlerBaseFixture VerifyNoDomainNotification() { - Bus.Verify( - bus => bus.RaiseEventAsync(It.IsAny()), - Times.Never); + Bus.DidNotReceive().RaiseEventAsync(Arg.Any()); return this; } diff --git a/CleanArchitecture.Application.Tests/Fixtures/Queries/Users/GetAllUsersTestFixture.cs b/CleanArchitecture.Application.Tests/Fixtures/Queries/Users/GetAllUsersTestFixture.cs index 9dde37d..0e23086 100644 --- a/CleanArchitecture.Application.Tests/Fixtures/Queries/Users/GetAllUsersTestFixture.cs +++ b/CleanArchitecture.Application.Tests/Fixtures/Queries/Users/GetAllUsersTestFixture.cs @@ -1,11 +1,10 @@ using System; -using System.Linq; using CleanArchitecture.Application.Queries.Users.GetAll; using CleanArchitecture.Domain.Entities; using CleanArchitecture.Domain.Enums; using CleanArchitecture.Domain.Interfaces.Repositories; -using MockQueryable.Moq; -using Moq; +using MockQueryable.NSubstitute; +using NSubstitute; namespace CleanArchitecture.Application.Tests.Fixtures.Queries.Users; @@ -13,50 +12,44 @@ public sealed class GetAllUsersTestFixture : QueryHandlerBaseFixture { public GetAllUsersTestFixture() { - UserRepository = new Mock(); + UserRepository = Substitute.For(); - Handler = new GetAllUsersQueryHandler(UserRepository.Object); + Handler = new GetAllUsersQueryHandler(UserRepository); } - private Mock UserRepository { get; } + private IUserRepository UserRepository { get; } public GetAllUsersQueryHandler Handler { get; } public Guid ExistingUserId { get; } = Guid.NewGuid(); public void SetupUserAsync() { - var user = new Mock(() => - new User( + var user = new User( ExistingUserId, "max@mustermann.com", "Max", "Mustermann", "Password", - UserRole.User)); + UserRole.User); - var query = new[] { user.Object }.AsQueryable().BuildMock(); + var query = new[] { user }.BuildMock(); - UserRepository - .Setup(x => x.GetAllNoTracking()) - .Returns(query); + UserRepository.GetAllNoTracking().Returns(query); } public void SetupDeletedUserAsync() { - var user = new Mock(() => - new User( + var user = new User( ExistingUserId, "max@mustermann.com", "Max", "Mustermann", "Password", - UserRole.User)); + UserRole.User); - user.Object.Delete(); + user.Delete(); - var query = new[] { user.Object }.AsQueryable().BuildMock(); + var query = new[] { user }.BuildMock(); - UserRepository - .Setup(x => x.GetAllNoTracking()) - .Returns(query); + UserRepository.GetAllNoTracking().Returns(query); } } \ No newline at end of file diff --git a/CleanArchitecture.Application.Tests/Fixtures/Queries/Users/GetUserByIdTestFixture.cs b/CleanArchitecture.Application.Tests/Fixtures/Queries/Users/GetUserByIdTestFixture.cs index e175faa..741faac 100644 --- a/CleanArchitecture.Application.Tests/Fixtures/Queries/Users/GetUserByIdTestFixture.cs +++ b/CleanArchitecture.Application.Tests/Fixtures/Queries/Users/GetUserByIdTestFixture.cs @@ -4,8 +4,8 @@ using CleanArchitecture.Application.Queries.Users.GetUserById; using CleanArchitecture.Domain.Entities; using CleanArchitecture.Domain.Enums; using CleanArchitecture.Domain.Interfaces.Repositories; -using MockQueryable.Moq; -using Moq; +using MockQueryable.NSubstitute; +using NSubstitute; namespace CleanArchitecture.Application.Tests.Fixtures.Queries.Users; @@ -13,50 +13,44 @@ public sealed class GetUserByIdTestFixture : QueryHandlerBaseFixture { public GetUserByIdTestFixture() { - UserRepository = new Mock(); + UserRepository = Substitute.For(); - Handler = new GetUserByIdQueryHandler(UserRepository.Object, Bus.Object); + Handler = new GetUserByIdQueryHandler(UserRepository, Bus); } - private Mock UserRepository { get; } + private IUserRepository UserRepository { get; } public GetUserByIdQueryHandler Handler { get; } public Guid ExistingUserId { get; } = Guid.NewGuid(); public void SetupUserAsync() { - var user = new Mock(() => - new User( + var user = new User( ExistingUserId, "max@mustermann.com", "Max", "Mustermann", "Password", - UserRole.User)); + UserRole.User); - var query = new[] { user.Object }.AsQueryable().BuildMock(); + var query = new[] { user }.BuildMock(); - UserRepository - .Setup(x => x.GetAllNoTracking()) - .Returns(query); + UserRepository.GetAllNoTracking().Returns(query); } public void SetupDeletedUserAsync() { - var user = new Mock(() => - new User( + var user = new User( ExistingUserId, "max@mustermann.com", "Max", "Mustermann", "Password", - UserRole.User)); + UserRole.User); - user.Object.Delete(); + user.Delete(); - var query = new[] { user.Object }.AsQueryable().BuildMock(); + var query = new[] { user }.AsQueryable().BuildMock(); - UserRepository - .Setup(x => x.GetAllNoTracking()) - .Returns(query); + UserRepository.GetAllNoTracking().Returns(query); } } \ No newline at end of file diff --git a/CleanArchitecture.Application/CleanArchitecture.Application.csproj b/CleanArchitecture.Application/CleanArchitecture.Application.csproj index f6b595c..fd17662 100644 --- a/CleanArchitecture.Application/CleanArchitecture.Application.csproj +++ b/CleanArchitecture.Application/CleanArchitecture.Application.csproj @@ -6,7 +6,7 @@ - + diff --git a/CleanArchitecture.Domain.Tests/CleanArchitecture.Domain.Tests.csproj b/CleanArchitecture.Domain.Tests/CleanArchitecture.Domain.Tests.csproj index 5cd7b31..9a66f90 100644 --- a/CleanArchitecture.Domain.Tests/CleanArchitecture.Domain.Tests.csproj +++ b/CleanArchitecture.Domain.Tests/CleanArchitecture.Domain.Tests.csproj @@ -10,8 +10,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CleanArchitecture.Domain.Tests/CommandHandler/User/ChangePassword/ChangePasswordCommandTestFixture.cs b/CleanArchitecture.Domain.Tests/CommandHandler/User/ChangePassword/ChangePasswordCommandTestFixture.cs index 74f24c7..20e2189 100644 --- a/CleanArchitecture.Domain.Tests/CommandHandler/User/ChangePassword/ChangePasswordCommandTestFixture.cs +++ b/CleanArchitecture.Domain.Tests/CommandHandler/User/ChangePassword/ChangePasswordCommandTestFixture.cs @@ -2,7 +2,7 @@ using CleanArchitecture.Domain.Commands.Users.ChangePassword; using CleanArchitecture.Domain.Enums; using CleanArchitecture.Domain.Interfaces.Repositories; -using Moq; +using NSubstitute; using BC = BCrypt.Net.BCrypt; namespace CleanArchitecture.Domain.Tests.CommandHandler.User.ChangePassword; @@ -11,18 +11,18 @@ public sealed class ChangePasswordCommandTestFixture : CommandHandlerFixtureBase { public ChangePasswordCommandTestFixture() { - UserRepository = new Mock(); + UserRepository = Substitute.For(); CommandHandler = new ChangePasswordCommandHandler( - Bus.Object, - UnitOfWork.Object, - NotificationHandler.Object, - UserRepository.Object, - User.Object); + Bus, + UnitOfWork, + NotificationHandler, + UserRepository, + User); } public ChangePasswordCommandHandler CommandHandler { get; } - private Mock UserRepository { get; } + private IUserRepository UserRepository { get; } public Entities.User SetupUser() { @@ -34,11 +34,11 @@ public sealed class ChangePasswordCommandTestFixture : CommandHandlerFixtureBase BC.HashPassword("z8]tnayvd5FNLU9:]AQm"), UserRole.User); - User.Setup(x => x.GetUserId()).Returns(user.Id); + User.GetUserId().Returns(user.Id); UserRepository - .Setup(x => x.GetByIdAsync(It.Is(y => y == user.Id))) - .ReturnsAsync(user); + .GetByIdAsync(Arg.Is(y => y == user.Id)) + .Returns(user); return user; } @@ -46,7 +46,7 @@ public sealed class ChangePasswordCommandTestFixture : CommandHandlerFixtureBase public Guid SetupMissingUser() { var id = Guid.NewGuid(); - User.Setup(x => x.GetUserId()).Returns(id); + User.GetUserId().Returns(id); return id; } } \ No newline at end of file diff --git a/CleanArchitecture.Domain.Tests/CommandHandler/User/CreateUser/CreateUserCommandTestFixture.cs b/CleanArchitecture.Domain.Tests/CommandHandler/User/CreateUser/CreateUserCommandTestFixture.cs index f6879b3..3662b65 100644 --- a/CleanArchitecture.Domain.Tests/CommandHandler/User/CreateUser/CreateUserCommandTestFixture.cs +++ b/CleanArchitecture.Domain.Tests/CommandHandler/User/CreateUser/CreateUserCommandTestFixture.cs @@ -2,7 +2,7 @@ using System; using CleanArchitecture.Domain.Commands.Users.CreateUser; using CleanArchitecture.Domain.Enums; using CleanArchitecture.Domain.Interfaces.Repositories; -using Moq; +using NSubstitute; namespace CleanArchitecture.Domain.Tests.CommandHandler.User.CreateUser; @@ -10,17 +10,17 @@ public sealed class CreateUserCommandTestFixture : CommandHandlerFixtureBase { public CreateUserCommandTestFixture() { - UserRepository = new Mock(); + UserRepository = Substitute.For(); CommandHandler = new CreateUserCommandHandler( - Bus.Object, - UnitOfWork.Object, - NotificationHandler.Object, - UserRepository.Object); + Bus, + UnitOfWork, + NotificationHandler, + UserRepository); } public CreateUserCommandHandler CommandHandler { get; } - private Mock UserRepository { get; } + private IUserRepository UserRepository { get; } public Entities.User SetupUser() { @@ -33,8 +33,8 @@ public sealed class CreateUserCommandTestFixture : CommandHandlerFixtureBase UserRole.User); UserRepository - .Setup(x => x.GetByIdAsync(It.Is(y => y == user.Id))) - .ReturnsAsync(user); + .GetByIdAsync(Arg.Is(y => y == user.Id)) + .Returns(user); return user; } diff --git a/CleanArchitecture.Domain.Tests/CommandHandler/User/DeleteUser/DeleteUserCommandTestFixture.cs b/CleanArchitecture.Domain.Tests/CommandHandler/User/DeleteUser/DeleteUserCommandTestFixture.cs index aaf2e66..92af9a4 100644 --- a/CleanArchitecture.Domain.Tests/CommandHandler/User/DeleteUser/DeleteUserCommandTestFixture.cs +++ b/CleanArchitecture.Domain.Tests/CommandHandler/User/DeleteUser/DeleteUserCommandTestFixture.cs @@ -2,7 +2,7 @@ using System; using CleanArchitecture.Domain.Commands.Users.DeleteUser; using CleanArchitecture.Domain.Enums; using CleanArchitecture.Domain.Interfaces.Repositories; -using Moq; +using NSubstitute; namespace CleanArchitecture.Domain.Tests.CommandHandler.User.DeleteUser; @@ -10,18 +10,18 @@ public sealed class DeleteUserCommandTestFixture : CommandHandlerFixtureBase { public DeleteUserCommandTestFixture() { - UserRepository = new Mock(); + UserRepository = Substitute.For(); CommandHandler = new DeleteUserCommandHandler( - Bus.Object, - UnitOfWork.Object, - NotificationHandler.Object, - UserRepository.Object, - User.Object); + Bus, + UnitOfWork, + NotificationHandler, + UserRepository, + User); } public DeleteUserCommandHandler CommandHandler { get; } - private Mock UserRepository { get; } + private IUserRepository UserRepository { get; } public Entities.User SetupUser() { @@ -34,8 +34,8 @@ public sealed class DeleteUserCommandTestFixture : CommandHandlerFixtureBase UserRole.User); UserRepository - .Setup(x => x.GetByIdAsync(It.Is(y => y == user.Id))) - .ReturnsAsync(user); + .GetByIdAsync(Arg.Is(y => y == user.Id)) + .Returns(user); return user; } diff --git a/CleanArchitecture.Domain.Tests/CommandHandler/User/LoginUser/LoginUserCommandTestFixture.cs b/CleanArchitecture.Domain.Tests/CommandHandler/User/LoginUser/LoginUserCommandTestFixture.cs index c071959..c8f91cd 100644 --- a/CleanArchitecture.Domain.Tests/CommandHandler/User/LoginUser/LoginUserCommandTestFixture.cs +++ b/CleanArchitecture.Domain.Tests/CommandHandler/User/LoginUser/LoginUserCommandTestFixture.cs @@ -4,7 +4,7 @@ using CleanArchitecture.Domain.Enums; using CleanArchitecture.Domain.Interfaces.Repositories; using CleanArchitecture.Domain.Settings; using Microsoft.Extensions.Options; -using Moq; +using NSubstitute; using BC = BCrypt.Net.BCrypt; namespace CleanArchitecture.Domain.Tests.CommandHandler.User.LoginUser; @@ -13,7 +13,7 @@ public sealed class LoginUserCommandTestFixture : CommandHandlerFixtureBase { public LoginUserCommandTestFixture() { - UserRepository = new Mock(); + UserRepository = Substitute.For(); TokenSettings = Options.Create(new TokenSettings { @@ -23,15 +23,15 @@ public sealed class LoginUserCommandTestFixture : CommandHandlerFixtureBase }); CommandHandler = new LoginUserCommandHandler( - Bus.Object, - UnitOfWork.Object, - NotificationHandler.Object, - UserRepository.Object, + Bus, + UnitOfWork, + NotificationHandler, + UserRepository, TokenSettings); } public LoginUserCommandHandler CommandHandler { get; set; } - public Mock UserRepository { get; set; } + public IUserRepository UserRepository { get; set; } public IOptions TokenSettings { get; set; } public Entities.User SetupUser() @@ -44,11 +44,11 @@ public sealed class LoginUserCommandTestFixture : CommandHandlerFixtureBase BC.HashPassword("z8]tnayvd5FNLU9:]AQm"), UserRole.User); - User.Setup(x => x.GetUserId()).Returns(user.Id); + User.GetUserId().Returns(user.Id); UserRepository - .Setup(x => x.GetByEmailAsync(It.Is(y => y == user.Email))) - .ReturnsAsync(user); + .GetByEmailAsync(Arg.Is(y => y == user.Email)) + .Returns(user); return user; } diff --git a/CleanArchitecture.Domain.Tests/CommandHandler/User/UpdateUser/UpdateUserCommandHandlerTests.cs b/CleanArchitecture.Domain.Tests/CommandHandler/User/UpdateUser/UpdateUserCommandHandlerTests.cs index 2e1885b..841c796 100644 --- a/CleanArchitecture.Domain.Tests/CommandHandler/User/UpdateUser/UpdateUserCommandHandlerTests.cs +++ b/CleanArchitecture.Domain.Tests/CommandHandler/User/UpdateUser/UpdateUserCommandHandlerTests.cs @@ -4,7 +4,7 @@ using CleanArchitecture.Domain.Commands.Users.UpdateUser; using CleanArchitecture.Domain.Enums; using CleanArchitecture.Domain.Errors; using CleanArchitecture.Domain.Events.User; -using Moq; +using NSubstitute; using Xunit; namespace CleanArchitecture.Domain.Tests.CommandHandler.User.UpdateUser; @@ -69,8 +69,8 @@ public sealed class UpdateUserCommandHandlerTests UserRole.User); _fixture.UserRepository - .Setup(x => x.GetByEmailAsync(command.Email)) - .ReturnsAsync(new Entities.User( + .GetByEmailAsync(command.Email) + .Returns(new Entities.User( Guid.NewGuid(), command.Email, "Some", diff --git a/CleanArchitecture.Domain.Tests/CommandHandler/User/UpdateUser/UpdateUserCommandTestFixture.cs b/CleanArchitecture.Domain.Tests/CommandHandler/User/UpdateUser/UpdateUserCommandTestFixture.cs index 6d94edb..cd21e9f 100644 --- a/CleanArchitecture.Domain.Tests/CommandHandler/User/UpdateUser/UpdateUserCommandTestFixture.cs +++ b/CleanArchitecture.Domain.Tests/CommandHandler/User/UpdateUser/UpdateUserCommandTestFixture.cs @@ -2,7 +2,7 @@ using System; using CleanArchitecture.Domain.Commands.Users.UpdateUser; using CleanArchitecture.Domain.Enums; using CleanArchitecture.Domain.Interfaces.Repositories; -using Moq; +using NSubstitute; namespace CleanArchitecture.Domain.Tests.CommandHandler.User.UpdateUser; @@ -10,18 +10,18 @@ public sealed class UpdateUserCommandTestFixture : CommandHandlerFixtureBase { public UpdateUserCommandTestFixture() { - UserRepository = new Mock(); + UserRepository = Substitute.For(); CommandHandler = new UpdateUserCommandHandler( - Bus.Object, - UnitOfWork.Object, - NotificationHandler.Object, - UserRepository.Object, - User.Object); + Bus, + UnitOfWork, + NotificationHandler, + UserRepository, + User); } public UpdateUserCommandHandler CommandHandler { get; } - public Mock UserRepository { get; } + public IUserRepository UserRepository { get; } public Entities.User SetupUser() { @@ -34,8 +34,8 @@ public sealed class UpdateUserCommandTestFixture : CommandHandlerFixtureBase UserRole.User); UserRepository - .Setup(x => x.GetByIdAsync(It.Is(y => y == user.Id))) - .ReturnsAsync(user); + .GetByIdAsync(Arg.Is(y => y == user.Id)) + .Returns(user); return user; } diff --git a/CleanArchitecture.Domain.Tests/CommandHandlerFixtureBase.cs b/CleanArchitecture.Domain.Tests/CommandHandlerFixtureBase.cs index 841fa1c..27b46ef 100644 --- a/CleanArchitecture.Domain.Tests/CommandHandlerFixtureBase.cs +++ b/CleanArchitecture.Domain.Tests/CommandHandlerFixtureBase.cs @@ -4,7 +4,7 @@ using CleanArchitecture.Domain.DomainEvents; using CleanArchitecture.Domain.Enums; using CleanArchitecture.Domain.Interfaces; using CleanArchitecture.Domain.Notifications; -using Moq; +using NSubstitute; namespace CleanArchitecture.Domain.Tests; @@ -12,46 +12,40 @@ public class CommandHandlerFixtureBase { protected CommandHandlerFixtureBase() { - Bus = new Mock(); - UnitOfWork = new Mock(); - NotificationHandler = new Mock(); - User = new Mock(); + Bus = Substitute.For(); + UnitOfWork = Substitute.For(); + NotificationHandler = Substitute.For(); + User = Substitute.For(); - User.Setup(x => x.GetUserId()).Returns(Guid.NewGuid()); - User.Setup(x => x.GetUserRole()).Returns(UserRole.Admin); + User.GetUserId().Returns(Guid.NewGuid()); + User.GetUserRole().Returns(UserRole.Admin); - UnitOfWork.Setup(unit => unit.CommitAsync()).ReturnsAsync(true); + UnitOfWork.CommitAsync().Returns(true); } - protected Mock Bus { get; } - protected Mock UnitOfWork { get; } - protected Mock NotificationHandler { get; } - protected Mock User { get; } + protected IMediatorHandler Bus { get; } + protected IUnitOfWork UnitOfWork { get; } + protected DomainNotificationHandler NotificationHandler { get; } + protected IUser User { get; } public CommandHandlerFixtureBase VerifyExistingNotification(string errorCode, string message) { - Bus.Verify( - bus => bus.RaiseEventAsync( - It.Is(not => not.Code == errorCode && not.Value == message)), - Times.Once); + Bus.Received(1).RaiseEventAsync( + Arg.Is(not => not.Code == errorCode && not.Value == message)); return this; } public CommandHandlerFixtureBase VerifyAnyDomainNotification() { - Bus.Verify( - bus => bus.RaiseEventAsync(It.IsAny()), - Times.Once); + Bus.Received(1).RaiseEventAsync(Arg.Any()); return this; } public CommandHandlerFixtureBase VerifyNoDomainNotification() { - Bus.Verify( - bus => bus.RaiseEventAsync(It.IsAny()), - Times.Never); + Bus.DidNotReceive().RaiseEventAsync(Arg.Any()); return this; } @@ -59,39 +53,37 @@ public class CommandHandlerFixtureBase public CommandHandlerFixtureBase VerifyNoRaisedEvent() where TEvent : DomainEvent { - Bus.Verify( - bus => bus.RaiseEventAsync(It.IsAny()), - Times.Never); + Bus.DidNotReceive().RaiseEventAsync(Arg.Any()); return this; } - public CommandHandlerFixtureBase VerifyNoRaisedEvent(Expression> checkFunction) + public CommandHandlerFixtureBase VerifyNoRaisedEvent(Expression> checkFunction) where TEvent : DomainEvent { - Bus.Verify(bus => bus.RaiseEventAsync(It.Is(checkFunction)), Times.Never); + Bus.DidNotReceive().RaiseEventAsync(Arg.Is(checkFunction)); return this; } public CommandHandlerFixtureBase VerifyNoCommit() { - UnitOfWork.Verify(unit => unit.CommitAsync(), Times.Never); + UnitOfWork.DidNotReceive().CommitAsync(); return this; } public CommandHandlerFixtureBase VerifyCommit() { - UnitOfWork.Verify(unit => unit.CommitAsync(), Times.Once); + UnitOfWork.Received(1).CommitAsync(); return this; } - public CommandHandlerFixtureBase VerifyRaisedEvent(Expression> checkFunction) + public CommandHandlerFixtureBase VerifyRaisedEvent(Expression> checkFunction) where TEvent : DomainEvent { - Bus.Verify(bus => bus.RaiseEventAsync(It.Is(checkFunction)), Times.Once); + Bus.Received(1).RaiseEventAsync(Arg.Is(checkFunction)); return this; } diff --git a/CleanArchitecture.Domain/CleanArchitecture.Domain.csproj b/CleanArchitecture.Domain/CleanArchitecture.Domain.csproj index 2da0d2d..2e6148c 100644 --- a/CleanArchitecture.Domain/CleanArchitecture.Domain.csproj +++ b/CleanArchitecture.Domain/CleanArchitecture.Domain.csproj @@ -9,9 +9,11 @@ - + + + diff --git a/CleanArchitecture.Infrastructure.Tests/CleanArchitecture.Infrastructure.Tests.csproj b/CleanArchitecture.Infrastructure.Tests/CleanArchitecture.Infrastructure.Tests.csproj index 23f7842..41e3ba7 100644 --- a/CleanArchitecture.Infrastructure.Tests/CleanArchitecture.Infrastructure.Tests.csproj +++ b/CleanArchitecture.Infrastructure.Tests/CleanArchitecture.Infrastructure.Tests.csproj @@ -9,8 +9,8 @@ - - + + runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CleanArchitecture.Infrastructure.Tests/InMemoryBusTests.cs b/CleanArchitecture.Infrastructure.Tests/InMemoryBusTests.cs index d6916e3..801de70 100644 --- a/CleanArchitecture.Infrastructure.Tests/InMemoryBusTests.cs +++ b/CleanArchitecture.Infrastructure.Tests/InMemoryBusTests.cs @@ -1,12 +1,11 @@ using System; -using System.Threading; using System.Threading.Tasks; using CleanArchitecture.Domain.Commands.Users.DeleteUser; using CleanArchitecture.Domain.DomainEvents; using CleanArchitecture.Domain.Events.User; using CleanArchitecture.Domain.Notifications; using MediatR; -using Moq; +using NSubstitute; using Xunit; namespace CleanArchitecture.Infrastructure.Tests; @@ -16,10 +15,10 @@ public sealed class InMemoryBusTests [Fact] public async Task InMemoryBus_Should_Publish_When_Not_DomainNotification() { - var mediator = new Mock(); - var domainEventStore = new Mock(); + var mediator = Substitute.For(); + var domainEventStore = Substitute.For(); - var inMemoryBus = new InMemoryBus(mediator.Object, domainEventStore.Object); + var inMemoryBus = new InMemoryBus(mediator, domainEventStore); const string key = "Key"; const string value = "Value"; @@ -29,36 +28,36 @@ public sealed class InMemoryBusTests await inMemoryBus.RaiseEventAsync(domainEvent); - mediator.Verify(x => x.Publish(domainEvent, CancellationToken.None), Times.Once); + await mediator.Received(1).Publish(Arg.Is(x => x.Equals(domainEvent)), default); } [Fact] public async Task InMemoryBus_Should_Save_And_Publish_When_DomainNotification() { - var mediator = new Mock(); - var domainEventStore = new Mock(); + var mediator = Substitute.For(); + var domainEventStore = Substitute.For(); - var inMemoryBus = new InMemoryBus(mediator.Object, domainEventStore.Object); + var inMemoryBus = new InMemoryBus(mediator, domainEventStore); var userDeletedEvent = new UserDeletedEvent(Guid.NewGuid()); await inMemoryBus.RaiseEventAsync(userDeletedEvent); - mediator.Verify(x => x.Publish(userDeletedEvent, CancellationToken.None), Times.Once); + await mediator.Received(1).Publish(Arg.Is(x => x.Equals(userDeletedEvent)), default); } [Fact] public async Task InMemoryBus_Should_Send_Command_Async() { - var mediator = new Mock(); - var domainEventStore = new Mock(); + var mediator = Substitute.For(); + var domainEventStore = Substitute.For(); - var inMemoryBus = new InMemoryBus(mediator.Object, domainEventStore.Object); + var inMemoryBus = new InMemoryBus(mediator, domainEventStore); var deleteUserCommand = new DeleteUserCommand(Guid.NewGuid()); await inMemoryBus.SendCommandAsync(deleteUserCommand); - mediator.Verify(x => x.Send(deleteUserCommand, CancellationToken.None), Times.Once); + await mediator.Received(1).Send(Arg.Is(x => x.Equals(deleteUserCommand)), default); } } \ No newline at end of file diff --git a/CleanArchitecture.Infrastructure.Tests/UnitOfWorkTests.cs b/CleanArchitecture.Infrastructure.Tests/UnitOfWorkTests.cs index 5700ae1..4aa9068 100644 --- a/CleanArchitecture.Infrastructure.Tests/UnitOfWorkTests.cs +++ b/CleanArchitecture.Infrastructure.Tests/UnitOfWorkTests.cs @@ -6,7 +6,7 @@ using CleanArchitecture.Infrastructure.Tests.Fixtures; using FluentAssertions; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; -using Moq; +using NSubstitute; using Xunit; namespace CleanArchitecture.Infrastructure.Tests; @@ -17,14 +17,12 @@ public sealed class UnitOfWorkTests public async Task Should_Commit_Async_Returns_True() { var options = new DbContextOptionsBuilder(); - var dbContextMock = new Mock(options.Options); - var loggerMock = new Mock>>(); + var dbContextMock = Substitute.For(options.Options); + var loggerMock = Substitute.For>>(); - dbContextMock - .Setup(x => x.SaveChangesAsync(CancellationToken.None)) - .Returns(Task.FromResult(1)); + dbContextMock.SaveChangesAsync(CancellationToken.None).Returns(Task.FromResult(1)); - var unitOfWork = UnitOfWorkTestFixture.GetUnitOfWork(dbContextMock.Object, loggerMock.Object); + var unitOfWork = UnitOfWorkTestFixture.GetUnitOfWork(dbContextMock, loggerMock); var result = await unitOfWork.CommitAsync(); @@ -35,14 +33,14 @@ public sealed class UnitOfWorkTests public async Task Should_Commit_Async_Returns_False() { var options = new DbContextOptionsBuilder(); - var dbContextMock = new Mock(options.Options); - var loggerMock = new Mock>>(); + var dbContextMock = Substitute.For(options.Options); + var loggerMock = Substitute.For>>(); dbContextMock - .Setup(x => x.SaveChangesAsync(CancellationToken.None)) - .Throws(new DbUpdateException("Boom", new Exception("it broke"))); + .When(x => x.SaveChangesAsync(CancellationToken.None)) + .Do(x => throw new DbUpdateException("Boom", new Exception("it broke"))); - var unitOfWork = UnitOfWorkTestFixture.GetUnitOfWork(dbContextMock.Object, loggerMock.Object); + var unitOfWork = UnitOfWorkTestFixture.GetUnitOfWork(dbContextMock, loggerMock); var result = await unitOfWork.CommitAsync(); @@ -53,14 +51,14 @@ public sealed class UnitOfWorkTests public async Task Should_Throw_Exception_When_Commiting_With_DbUpdateException() { var options = new DbContextOptionsBuilder(); - var dbContextMock = new Mock(options.Options); - var loggerMock = new Mock>>(); + var dbContextMock = Substitute.For(options.Options); + var loggerMock = Substitute.For>>(); dbContextMock - .Setup(x => x.SaveChangesAsync(CancellationToken.None)) - .Throws(new Exception("boom")); + .When(x => x.SaveChangesAsync(CancellationToken.None)) + .Do(x => throw new Exception("Boom")); - var unitOfWork = UnitOfWorkTestFixture.GetUnitOfWork(dbContextMock.Object, loggerMock.Object); + var unitOfWork = UnitOfWorkTestFixture.GetUnitOfWork(dbContextMock, loggerMock); Func throwsAction = async () => await unitOfWork.CommitAsync(); diff --git a/CleanArchitecture.Infrastructure/CleanArchitecture.Infrastructure.csproj b/CleanArchitecture.Infrastructure/CleanArchitecture.Infrastructure.csproj index 420e4d3..1df52f3 100644 --- a/CleanArchitecture.Infrastructure/CleanArchitecture.Infrastructure.csproj +++ b/CleanArchitecture.Infrastructure/CleanArchitecture.Infrastructure.csproj @@ -11,10 +11,10 @@ - - - - + + + + all runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CleanArchitecture.IntegrationTests/CleanArchitecture.IntegrationTests.csproj b/CleanArchitecture.IntegrationTests/CleanArchitecture.IntegrationTests.csproj index ccf411c..d008535 100644 --- a/CleanArchitecture.IntegrationTests/CleanArchitecture.IntegrationTests.csproj +++ b/CleanArchitecture.IntegrationTests/CleanArchitecture.IntegrationTests.csproj @@ -9,11 +9,11 @@ - - - - - + + + + + diff --git a/CleanArchitecture.Proto/CleanArchitecture.Proto.csproj b/CleanArchitecture.Proto/CleanArchitecture.Proto.csproj index f7e2007..df3c40c 100644 --- a/CleanArchitecture.Proto/CleanArchitecture.Proto.csproj +++ b/CleanArchitecture.Proto/CleanArchitecture.Proto.csproj @@ -16,8 +16,8 @@ - - + + diff --git a/CleanArchitecture.gRPC.Tests/CleanArchitecture.gRPC.Tests.csproj b/CleanArchitecture.gRPC.Tests/CleanArchitecture.gRPC.Tests.csproj index c003af7..e4730d8 100644 --- a/CleanArchitecture.gRPC.Tests/CleanArchitecture.gRPC.Tests.csproj +++ b/CleanArchitecture.gRPC.Tests/CleanArchitecture.gRPC.Tests.csproj @@ -9,9 +9,9 @@ - - - + + + runtime; build; native; contentfiles; analyzers; buildtransitive diff --git a/CleanArchitecture.gRPC.Tests/Fixtures/UserTestsFixture.cs b/CleanArchitecture.gRPC.Tests/Fixtures/UserTestsFixture.cs index a6f8245..6ecba91 100644 --- a/CleanArchitecture.gRPC.Tests/Fixtures/UserTestsFixture.cs +++ b/CleanArchitecture.gRPC.Tests/Fixtures/UserTestsFixture.cs @@ -1,12 +1,11 @@ using System; using System.Collections.Generic; -using System.Linq; using CleanArchitecture.Application.gRPC; using CleanArchitecture.Domain.Entities; using CleanArchitecture.Domain.Enums; using CleanArchitecture.Domain.Interfaces.Repositories; -using MockQueryable.Moq; -using Moq; +using MockQueryable.NSubstitute; +using NSubstitute; namespace CleanArchitecture.gRPC.Tests.Fixtures; @@ -39,16 +38,14 @@ public sealed class UserTestsFixture UserRole.User) }; - var queryable = ExistingUsers.AsQueryable().BuildMock(); + var queryable = ExistingUsers.BuildMock(); - UserRepository - .Setup(repository => repository.GetAllNoTracking()) - .Returns(queryable); + UserRepository.GetAllNoTracking().Returns(queryable); - UsersApiImplementation = new UsersApiImplementation(UserRepository.Object); + UsersApiImplementation = new UsersApiImplementation(UserRepository); } - private Mock UserRepository { get; } = new(); + private IUserRepository UserRepository { get; } = Substitute.For(); public UsersApiImplementation UsersApiImplementation { get; }