Я использую JMockit для макетирования зависимостей для робота (таких как датчики, джойстики и т. Д.).Для одного из тестов моих классов мне нужно смоделировать два объекта джойстика.
В моем коде джойстики создаются следующим образом:
Joystick joystick1 = new Joystick(0);
Joystick joystick2 = new Joystick(1);
Я читал о том, как сопоставлять конкретные экземпляры объектов в разделе Соответствие экземпляров.в документации JMockit .
Эти шаги, однако, не работают для проверок (или, возможно, я делаю это неправильно), или они включают использование тега @Mocked
в параметрах каждого тестаметод, который был бы хлопотом, учитывая тот факт, что я хочу, чтобы это поведение выполнялось для всего класса из нескольких тестов.
Я не могу просто внедрить макетированные экземпляры в тестируемый класс, поскольку тестируемый класс фактически получает их от другогокласс в приложении, и я бы предпочел не издеваться над своей собственной кодовой базой, чтобы передать вводимые джойстики.
Поведение, к которому я стремлюсь, выглядит примерно так:
public class ClassUsingJoysticksTest {
@Injectable
private Joystick joystick1;
@Injectable
private Joystick joystick2;
@Before
public void setUp() {
new Expectations() {{
new Joystick(0);
result = joystick1;
new Joystick(1);
result = joystick2;
}};
}
@Test
public void someTest() {
ClassThatUsesJoysticks classThatUsesJoysticks = new ClassThatUsesJoysticks();
classThatUsesJoysticks.doSomething();
new Verifications() {{
joystick1.setRumble(1D);
joystick2.setRumble(2D);
}};
}
}
Соответствующая часть тестируемого класса:
public class ClassThatUsesJoysticks {
public void doSomething() {
Joystick joystick1 = OI.getInstance().getJoystick1(); // OI is our own class.
Joystick joystick2 = OI.getInstance().getJoystick2();
joystick1.setRumble(1);
joystick2.setRumble(2);
}
}
// OI class that we used to keep track of operator interface.
public class OI {
private Joystick joystick1, joystick2;
public OI() {
joystick1 = new Joystick(0); // First joystick is always on port 0.
joystick2 = new Joystick(1); // Next joystick is port 1.
}
public Joystick getJoystick1() {
return joystick1;
}
public Joystick getJoystick2() {
return joystick2;
}
}
Возможно ли что-то подобное с использованием JMockit?
Если хотите, actuaРеализацию, которую я пытаюсь реализовать (с плохой насмешкой над моей собственной базой кода), можно найти здесь .