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; }