Как смоделировать методы dbset Add (), Remove (), SaveChanges ()?Как настроить положительные и отрицательные возвращаемые значения? - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь написать модульные тесты для моего действия контроллера. Я использую NUnit 3 и Moq.

У меня есть методы Db, такие как Add () и Remove () в действии.

Я понимаю, что мне нужно смоделировать Db и настроить возвращаемые значения для методов соответственно.

Однако, когда дело доходит до таких методов, как db.Add (), db.Remove (), db.SaveChanges (); Я не понимаю, как установить истинные и ложные возвращаемые значения для одного и того же.

Мои действия для проверки:

[HttpPost]
[Route("Add")]
public List<string> Add([FromBody]model addModel)
{
    List<string> errors = new List<string>();
    try
    {
        model Model= new model()
        {
          propertyA = addModel.propertyA
        };
        db.Add(Model);
        db.SaveChanges();

    }
    catch (Exception e)
    {
        errors.Add(e.Message);
        return errors;
    }

    errors.Add("Success");
    return errors;
}

Чтобы написать положительные и отрицательные тесты для вышеуказанных методов, мне нужно иметь возможность устанавливать положительные и отрицательные возвращаемые значения для методов db.Add () и db.SaveChanges ().

Я пробовал следующее:

   [TestCase]
        public void Add_Succesfull_True()
        {
            Mock<DbContext> mockdb = new Mock<DbContext>();
            var model= db.model.Select(x => x).FirstOrDefault();
            model addModel = new model()
            {
               propertyA= model.propertyA
            };

            AuthController authController = new AuthController(userManager, configuration, mockdb.Object);
            var apiEndPoint = authController.Add(addModel);
            mockdb.Setup(x => x.Add(addModel)).Returns(??);

            Assert.IsTrue(apiEndPoint.Contains("Success"));
        }

Через intellisense я вижу, что db.Add () ожидает тип возврата

Microsoft.EntityFrameworkCore.ChangeTracking.

Мое понимание насмешек над DbContext таково:

  • Макет интерфейса DbContext.
  • Добавить, удалить, сохранить и т. Д. - это всего лишь методы, которые не имеют реализации при имитации.
  • мы настраиваем функцию и указываем возвращаемое значение по мере необходимости для контрольного примера, который заменяет собой реализацию.

Мне кажется, я неправильно высмеял вышесказанное. Нужно направление спасибо :) 1033 *

...