Я новичок в moq, и у меня возникла проблема с методом проверки moq.
И я пытаюсь выполнить модульный тест метода Add, например,
[TestMethod]
public void AddAccount()
{
var mockAccountSet = new Mock<DbSet<Account>> { CallBase = true };
var mockBankingContext = new Mock<BankingContext> { CallBase = true };
//mockBankingContext.Setup(m => m.Set<Account>()).Returns(mockAccountSet.Object);
mockBankingContext.Setup(m => m.Accounts).Returns(mockAccountSet.Object);
mockBankingContext.Setup(x => x.SaveChanges()).Returns(1);
BankingService bankingService = new BankingService(mockBankingContext.Object);
bankingService.AddAccount("Compte de test", 150);
mockAccountSet.Verify(m => m.Add(It.IsAny<Account>()), Times.Once());
}
Я пытаюсь использовать mockBankingContext.Setup (m => m.Set ()). Возвращает (mockAccountSet.Object), но это та же ошибка. Ошибка mockAccountSet.Verify, исключение:
Moq.MockException : '
Expected invocation on the mock once, but was 0 times: m => m.Add(It.IsAny<Account>())
Performed invocations:
Mock<DbSet<Account>:1> (m):
No invocations performed.
У меня есть следующие классы:
public class BankingContext : DbContext, IBankingContext
{
private readonly object _lock = new object();
public virtual DbSet<Operation> Operations { get; set; }
public virtual DbSet<Account> Accounts { get; set; }
public BankingContext() : base("BankingContext")
{
var shouldInitialized = !Database.Exists();
Database.Initialize(false);
if (shouldInitialized)
{
Database.CreateIfNotExists();
var migration = new DbMigrator(new Migrations.Configuration());
migration.Update();
}
this.Configuration.ProxyCreationEnabled = false;
this.Configuration.LazyLoadingEnabled = false;
}
public void AddAndSave<T>(T entity) where T : class
{
lock (_lock)
{
var set = Set<T>();
set.Add(entity);
SaveChanges();
DetachAllEntity();
}
}
}
public class BankingService : IBankingService
{
private IDataSet<Operation> _dateSetOperation;
private IDataSet<Account> _dateSetAccount;
private BankingContext _bankingContext;
public BankingService(BankingContext bankingContext)
{
_bankingContext = bankingContext;
_dateSetOperation = new DataBaseSet<Operation>(bankingContext);
_dateSetAccount = new DataBaseSet<Account>(bankingContext);
}
public Account AddAccount(string name, decimal initialBalance)
{
Account account = new Account
{
Name = name,
Initial_balance = initialBalance,
Date_creation = DateTime.Now
};
_dateSetAccount.Add(account);
return account;
}
}
И интерфейс:
public interface IBankingService
{
Account AddAccount(string name, decimal initialBalance);
...
some methods here...
}
В чем может быть проблема?
Спасибо за помощь