В моем ответе три части.
Во-первых, вы не можете высмеивать атрибуты и создание экземпляров с помощью EasyMock. Эти случаи нужны редко и означают, что вам следует провести рефакторинг.
Во-вторых, PowerMock может издеваться над экземплярами. Это мощный, но я на самом деле никогда не использую его сам.
В-третьих, в вашем случае,
- Я бы добавил конструктор, принимающий слушателя в параметре. Чтобы легко издеваться
- Выполните частичное макетирование и извлеките создание Диалога в определенный метод. Это если вам действительно нужно сохранить творение там. В противном случае я просто перенесу его на какой-нибудь завод и издевался бы над ним.
Пример кода:
public void openDialog() {
if (condition1) {
dialog = createDialog(listener, arg1, arg2);
} else if (condition2) {
dialog = createDialog(listener, arg1, arg2, arg3);
} else if (condition3) {
dialog = createDialog(listener, arg1, arg2, arg3);
}
}
/* default scope to make it mockable */ Dialog createDialog(DialogChangeListener listener, Object... args) {
//...
}
А потом тест:
TestClass testClass = EasyMock.partialMockBuilder(TestClass.class)
.addMockedMethod("createDialog")
.createMock();
expect(testClass.createDialog(listener, ...)).andReturn(someDialog);