Mock DbContext.set <T>.Add () EF6 завершается ошибкой - PullRequest
0 голосов
/ 07 апреля 2020

Я новичок в 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...
    }

В чем может быть проблема?

Спасибо за помощь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...