C# testy jednostkowe, mock i dbContect

Cześć,
mam problem z ogarnięciem testów jednostkowych. Być może moje podejście w ogóle jest błędne, więc prosiłbym o nakierowanie na właściwą drogę :slight_smile:

Mam klasę, która w założeniu ma służyć m.in. do zakładania konta dla nowego użytkownika:

public class AccountService : IAccountService
{
	private readonly DbContext _dbContext;
	private readonly IMapper _mapper;
	private readonly IPasswordHasher<User> _passwordHasher;
	private readonly JwtConfig _jwt;

	public AccountService(DbContext dbContext, IMapper mapper, IPasswordHasher<User> passwordHasher, IOptionsMonitor<Jwt> optionsMonitor)
	{
		_dbContext = dbContext;
		_mapper = mapper;
		_passwordHasher = passwordHasher;
		_jwt = optionsMonitor.CurrentValue;
	}

	public async Task CreateAccount(CreateAccountDto dto)
	{   
		[cała logika, np. mapowanie z dto czy hashowanie hasła]
		
		_dbContext.Users.Add(user);
		await _dbContext.SaveChangesAsync();			
	}
}

I teraz chciałem wykonać test jednostkowy. Na ten moment mam to:

[Fact]
public async Task CreateAccount_ForValidData_InvokeSaveChangesAsync()
{
	//arrange
	var systemDbContextMock = new Mock<SystemDbContext>();
	systemDbContextMock.Setup(x => x.Users.Add(new User() { Name = "", Email = "", PasswordHash = "" })).Returns((EntityEntry<User> u) => u);

	var mapperMock = new Mock<IMapper>();
	var passwordHasherMock = new Mock<IPasswordHasher<User>>();
	var jwtMock = new Mock<IOptionsMonitor<JwtConfig>>();

	var accountService = new AccountService(systemDbContextMock.Object, mapperMock.Object, passwordHasherMock.Object, jwtMock.Object);

	//act
	await accountService.CreateAccount(new CreateAccountDto() { Name = "", Email = "", Password = "" });
	
	//assert
	systemDbContextMock.Verify(m => m.SaveChangesAsync(It.IsAny<CancellationToken>()), Times.Once());
}

Czyli w założeniu test powinien zakończyć się powodzeniem jeżeli zostanie wywołana metoda SaveChangesAsync.
Przy uruchomieniu testu mam jednak komunikat:

Message:
System.NotSupportedException : Specified method is not supported.

Stack Trace:
IQueryable.get_Provider()
Queryable.Any[TSource](IQueryable`1 source, Expression`1 predicate)
AccountService.CreateAccount(CreateAccountDto dto)
AccountServiceUnitTest.CreateAccount_ForValidData_InvokeSaveChangesAsync()

Będę wdzięczny za wskazówki jak prawidło napisać taki test.

Jakiej biblioteki używasz do mockowania?

Moq

Zamiast

Spróbuj użyć It.IsAny<User>()