Подмена метода текущего класса

Создание unit-теста для метода, который в своем коде вызывает другой метод этого же класса.

Пример класса:

public class MyClass
{
   public int Calculation(int a, int b)
   {
       return a + Processing(b);
   }

   public int Processing(int b)
   {
       return b * b;
   }
}

Необходимо протестировать метод Calculation без реального вызова метода Processing.

moqДля этого воспользуемся библиотекой moq, с помощью которой сделаем заглушку для метода.

Код теста будет выглядеть следующим образом:

[TestMethod]
public void CalculationTest()
{
   var moq = new Mock<MyClass>();
   moq.Setup(c => c.Processing(It.IsAny<int>())).Returns(5);
   moq.CallBase = true;
   var actual = moq.Object.Calculation(2, 3);
   Assert.AreEqual(7, actual);
}

Однако, данный код теста не сработает и выдаст ошибку «System.NotSupportedException: Invalid setup on a non-virtual (overridable in VB) member: c => c.Processing(It.IsAny())». Для того, чтобы тест заработал и moq смог подменить метод Processing, необходимо объявить его как virtual.

public virtual int Processing(int b)
{
   return b * b;
}

About the author

Добавить комментарий

Сказать спасибо

Способ платежа:

Подписаться на обновления

Укажите свой e-mail чтобы получать уведомления о новых статьях.

Присоединиться к еще 3 подписчикам