Является ли хорошей идеей использовать T4 для макетирования объектов интерфейса для интерфейсов? - PullRequest
0 голосов
/ 07 октября 2009

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

var service = new MockCustomerService(); //code-generated and implements ICustomerService, has a method named 'Insert'
var target = new CustomerController(service);
var item = new Customer();
target.Insert(item);
service.InsertMethod.Assert.WasLastCalledWith(item);

или

var service = new MockCustomerService(); //code-generated and implements ICustomerService, has a method named 'GetById'
var target = new CustomerController(service);
var item = new Customer();
target.GetByIdMethod.ShouldReturn(item);
var actual = target.Edit(1);
service.GetByIdMethod.Assert.WasLastCalledWith(1);
Assert.AreEqual(actual.ViewData.Model, item);

Во-первых, это даже действительно "издевательство", или я упускаю что-то фундаментальное. Во-вторых, кажется ли это разумным подходом, или есть причины для использования каркаса помимо необходимости вручную создавать подобные классы? В-третьих, есть ли что-нибудь еще, что делает подобное? Я посмотрел вокруг и не нашел много ...

1 Ответ

0 голосов
/ 08 октября 2009

Во-первых, это даже действительно "издевательство", или я упускаю что-то фундаментальное.

Во втором примере, который вы показываете, - это насмешка, которая происходит в этой строке:

target.GetByIdMethod.ShouldReturn(item);

Это позволяет вам возвратить поддельное значение для target.GetByIdMethod (item), без фактического вызова target.GetByIdMethod.

Во-вторых, кажется ли это, что быть разумным подходом, или есть причины использования рамки за пределами не нужно вручную создавать похожие классы?

Причина, по которой мы используем фальшивый фреймворк, заключается в том, что мы хотим вернуть поддельные значения для определенных методов, чтобы мы могли легко контролировать то, что мы хотим протестировать. Кроме того, используя фальшивый каркас, мы также можем утверждать, что был вызван правильный метод и / или с правильными параметрами.

В-третьих, есть что-нибудь еще? там что делает подобное?

Что вы имеете в виду? Вы говорите, что есть какая-то насмешливая структура, которая делает подобное? Или есть какой-нибудь механизм генерации шаблонов кода модульного теста? Существует множество насмешливых рамок . Что касается того, есть ли какой-либо механизм генерации шаблонов кода модульного теста, ну, я не уверен в этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...