Как заставить PEX использовать фиктивный объект, когда конкретный объект является зависимостью, и затем автоматически генерировать контрольные примеры? - PullRequest
2 голосов
/ 05 января 2012

Я пишу компоненты на стороне клиента в предоставленной среде, и мне нужно иметь возможность модульного тестирования моих компонентов.Компоненты написаны с использованием шаблона MVP (Model-View-Presenter), я хочу использовать PEX для автоматической генерации модульных тестов для моих докладчиков.

Ниже приведен код докладчика.

public partial class CompetitorPresenter : PresenterBase
{

    private readonly ICompetitorView _view; 

    public IGlobalDataAccess GlobalDataAccess;

    public IGlobalUI Globals;

    public SystemClient Client;

    public bool DeleteRecord()
   {
           if (_view.CompetitorName != "Daniel")
                return false;
           if (Client.SystemName != "Ruby")
                return false;
           return true;
    }
}

Проблема, с которой я столкнулся, состоит в том, что объект SystemClient предоставляется платформой, и я не могу использовать фабричный класс для создания экземпляра SystemClient.Поэтому, когда я запускаю PEX для автоматической генерации модульных тестов, я должен сказать PEX игнорировать SystemClient, в результате этого метод DeleteRecord не полностью покрыт, поскольку строка Client.SystemName != "Ruby" не тестируется.

Поскольку у меня есть фиктивный объект MSystemClient (созданный с использованием родинок), мне интересно, мог бы я где-нибудь в конфигурации указать PEX использовать MSystemClient и позволить PEX автоматически генерировать тестовые случаи для полного охвата этого метода.

1 Ответ

0 голосов
/ 06 января 2012

Вы на правильном пути.Если вы не можете контролировать, где создается экземпляр CompetitorPresenter.Client, вы можете определить моль для всех экземпляров:

MSystemClient.AllInstances.SystemNameGet = () => "SomeName";

Ваш модульный тест должен выполняться в «размещенной среде»:

[HostType("Moles")]
public void TestMethod()
{
  MSystemClient.AllInstances.SystemNameGet = () => "SomeName";

  // Test code...
}
...