Не удается создать крот для класса System.Environment - PullRequest
1 голос
/ 17 августа 2011

Я хочу заменить поведение Environment.GetFolderPath в моем unittest, но после родовых родинок для сборки System сборка System.Moles не содержит определения типа MEnvironment.

1 Ответ

0 голосов
/ 18 августа 2011

Вы пробовали заглушки в интерфейсе?Подпрограмма может быть передана через инжектор конструктора или через входной параметр метода.Например, создайте интерфейс IEnvironment, включая метод GetFolderPath.Если вы уже знаете, как это сделать, то смело продолжайте свой путь.В противном случае ниже показано, как заглушки в классе Environment.(Я набираю это на своем телефоне, так что терпите меня;)

public interface IEnvironment
{
  string GetFolderPath(Environment.SpecialFolder folder);
}

Далее создайте заглушку:

public class MyEnvironment : Environment, IEnvironment
{ 
  public string GetFolderPath(Environment.SpecialFolder folder)
  {
    return base.GetFolderPath(folder);
  }
}

Передайте заглушку в ваш метод или конструктор класса какпараметр:

public void MyMethod(IEnvironment env)
{
  var path = env.GetFolderPath():
}

Для тестирования создайте макет типа или моль MyEnvironment.GetGolderPath.Создание макета является предпочтительным по сравнению с промоделированным типом по соображениям производительности.Макет просто возвращает значение, а не вызывает базовый метод, так же, как и тип moled.Он в любом случае необходим, так что вы можете сделать макет, так как он может быть использован для других тестов.

...