Я хочу добиться следующего поведения.
Тест моего класса зависит от какого-либо другого класса, я хочу издеваться над этой зависимостью с помощью jMock. Большинство методов будут возвращать некоторые стандартные значения, но есть один метод, когда я хочу сделать вызов оштукатуренной реализации, я знаю, что могу вызвать этот метод из will(...)
, но я хочу, чтобы метод вызывался точно такие же параметры, которые были переданы методу издевательства.
Тест
@Test
public void MyTest(){
Mockery context = new Mockery() {
{
setImposteriser(ClassImposteriser.INSTANCE);
}
};
IDependency mockObject = context.mock(IDependency.class);
Expectations exp = new Expectations() {
{
allowing(mockObject).methodToInvoke(????);
will(stubMethodToBeInvokedInstead(????));
}
};
}
Интерфейс
public interface IDependency {
public int methodToInvoke(int arg);
}
Используемый метод
public int stubMethodToBeInvokedInstead(int arg){
return arg;
}
Итак, как я могу захватить параметр, который был передан методу, который насмехается, поэтому я мог бы передать их вместо этого в stubbed?
EDIT
Чтобы дать еще один пример, скажем, я хочу издеваться над зависимостью INameSource
в следующем (С#) коде, чтобы протестировать класс Speaker
public class Speaker
{
private readonly string firstName;
private readonly string surname;
private INameSource nameSource ;
public Speaker(string firstName, string surname, INameSource nameSource)
{
this.firstName = firstName;
this.surname = surname;
this.nameSource = nameSource;
}
public string Introduce()
{
string name = nameSource.CreateName(firstName, surname);
return string.Format("Hi, my name is {0}", name);
}
}
public interface INameSource
{
string CreateName(string firstName, string surname);
}
Вот как это можно сделать в Rhino Mocks для С#. Я понимаю, что это не так просто, как это, поскольку делегаты отсутствуют в Java