Проблема с JUnit при попытке создать объект с конструктором, вызывающим статический метод

Я пишу тест JUnit для проверки некоторых методов.

  1. Я создаю объект в тестовом классе.
  2. Конструктор вызывает статический метод другого класса.
  3. Возвращаемый объект должен быть издевательским.

E.g.:

public class Test {
    private Red r;

    @Before
    public setUp() {
        Shape shape = new Shape();
    }

}

public class Shape {
    String t;

    Shape() {
        Red b = Box.getBoxes();
        t = b.getThis();
    }
}

public class Box {
    static Red r;

    public static Red getReds() {
        return r;
    }
}

Как я могу это сделать?


person saliya mendis    schedule 20.11.2015    source источник
comment
Ваш код не завершен и не компилируется. Укажите все классы и сообщения об ошибках, которые вы получаете.   -  person Michal Kordas    schedule 20.11.2015
comment
Чтобы издеваться над статическими методами, я бы предложил взглянуть на PowerMock (ito), который может сделать именно это. С его помощью вы можете издеваться над своим вызовом Box.getBoxes() и возвращать все, что захотите, включая фиктивный объект.   -  person Florian Schaetz    schedule 20.11.2015


Ответы (1)


Вот код для имитации этой функции с помощью API PowerMockito.

1. Чтобы получить красный объект как издевательский

PowerMockito.mockStatic(Box.class);
Second mockedRed= PowerMockito.mock(Red.class);
            PowerMockito.when( Box.class).getReds().thenReturn(mockedRed);

Вам нужно использовать Powermockito runner и добавить необходимые тестовые классы (разделенные запятыми), которые должны быть имитированы API-интерфейсом powermock.

@RunWith(PowerMockRunner.class)
@PrepareForTest({Box.class,Red.class})
class Test{
// your testing code

}
person Rocky Mena    schedule 20.11.2015