Как макетировать свойство или метод базового класса в C # - PullRequest
0 голосов
/ 07 сентября 2018

Я провожу серфинг по интернету для фиктивного члена базового класса в тестовом наборе Nunit без удачи и, наконец, решаю попросить эту записку собрать сообщество переполнения.

Ниже приведен фрагмент кода в моем приложении. я собираюсь написать модульный тест для класса BankIntegrationController и хочу создать данные-заглушки или макет для свойства IsValid и метода Print.

Fremwork: Moq, Nunit

public class CController : IController
{
     public bool IsValid {get;set;}

     public string Print()
     {
            return  // some stuff here;
     }
}

public class BankIntegrationController : CController, IBankIntegration
{
    public object Show()
    {
       if(this.IsValid)
       {
          var somevar = this.Print();
       }

       return; //some object
    }
}

1 Ответ

0 голосов
/ 07 сентября 2018

Вам не нужно ничего издеваться. Просто установите свойство перед вызовом Show:

[Fact]
public void Show_Valid()
{
    var controller = new BankIntegrationController { Valid = true };
    // Any other set up here...
    var result = controller.Show();
    // Assertions about the result
}

[Fact]
public void Show_Invalid()
{
    var controller = new BankIntegrationController { Valid = false };
    // Any other set up here...
    var result = controller.Show();
    // Assertions about the result
}

Mocking - действительно ценный метод, когда вы хотите указать, как зависимость будет вести себя в конкретном сценарии (и особенно, когда вы хотите проверить, как ваш код взаимодействует с ней), но в этой ситуации вы не иметь любые зависимости (которые вы нам показали). Я наблюдал, как многие разработчики без особого труда тратятся на насмешки в трех ситуациях:

  • Когда нет зависимости (или другого абстрактного поведения), как в этом случае
  • Когда рукописная ложная реализация приведет к более простым тестам
  • Когда существующую конкретную реализацию будет проще использовать. (Например, вам редко нужно издеваться над IList<T> - просто введите List<T> в ваших тестах.)
...