Запись вызовов метода объекта для генерации автоматического теста - PullRequest
2 голосов
/ 13 января 2011

У меня есть объект с большим интерфейсом, и я хотел бы записать все вызовы его методов, сделанные во время сеанса пользователя. В идеале эта последовательность вызовов должна быть доступна в виде исходного кода:

myobj.MethodA(42);
myobj.MethodB("spam", false);
...

Затем я бы преобразовал этот код в контрольный пример, чтобы провести своего рода автоматический тест на дым / нагрузку.

Тест нагрузки WCF может сделать это для служб WCF, а регистратор тестов CodedUI - для интерфейсов пользователя. Какие у меня варианты для класса POCO? Я в состоянии отредактировать код приложения и заменить рассматриваемый объект некоторым прокси-сервером записи / пересылки.

1 Ответ

1 голос
/ 14 января 2011

Вы могли бы сделать это с помощью Rhino.Mocks.

var code_builder = new StringBuilder();

var myobj = MockRepository.GenerateStub<IMyObj>();

myobj.Stub(x => x.MethodA(Arg<int>.Is.Anything))
    .WhenCalled(x => code_builder.AppendLine(
        string.Format("myobj.MethodA({0});", x.Arguments[0]));

myobj.Stub(x => x.MethodB(Arg<string>.Is.Anything, Arg<bool>.Is.Anything))
    .WhenCalled(x => code_builder.AppendLine(
        string.Format("myobj.MethodB({0}, {1});", x.Arguments[0], x.Arguments[1]));

Как только вы записали все значения, вы получили все вызовы в StringBuilder, и вы можете делать сто, что вы будете.

На самом деле может быть меньше работы по созданию новой реализации интерфейса, который создает код подобным образом в каждом методе.Возможно, вам понадобится реализация для функции , чтобы пользователь мог пройти через сеанс, и в этом случае вы можете создать класс, производный от вашей реализации интерфейса или декорирующий ее, и добавить это построение кодафункциональность при переадресации вызовов в / из «обычного» объекта.

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