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