Пересмешивающий статический метод того же класса, который необходимо проверить в модульном тесте - PullRequest
0 голосов
/ 31 октября 2018

У меня есть класс, который имеет несколько статических методов. 1 статический метод вызывает 1 другой закрытый метод, который в итоге вызывает второй публичный статический метод. Я хочу издеваться над вторым статическим методом. Это возможно. например,

public static A(){
    b();
} 
private static b(){
    c();
}
public static c(){
}

Я хочу смоделировать c (), но хочу сохранить функциональность a () и b () как есть. Это возможно? Если да, то как?

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Как упомянул @GhostCat: необходимость в имитации статических методов - это запах плохого дизайна, поэтому вам следует прежде всего подумать о рефакторинге своего кода, чтобы вам не потребовалось статическое моделирование.

Mockito не поддерживает насмешку над статическими методами. Подробнее здесь

Вместо этого можно использовать PowerMockito .

Например:

PowerMockito.stub(PowerMockito.method(YourStaticClass.class, "c")).toReturn("someValue"); 

Кстати: кажется, ваши методы не имеют возвращаемого типа.

0 голосов
/ 31 октября 2018

Этот существующий вопрос SO рассказывает, как это сделать с помощью PowerMockito, статического насмешливого и концепции Mockito шпион .

Но чего не хватает в этих входных данных: хотя эти технические решения работают, вам следует подумать, чтобы не пошли по этому пути.

Вместо этого: вы создали сложный для тестирования дизайн . Теперь вы смотрите на (черную) насмешливую магию, чтобы включить тестирование. Реальный ответ: сделайте шаг назад и оцените свой дизайн. Попробуйте переработать его так, чтобы его стало легко проверить.

Все остальное - пустая трата времени и энергии в долгосрочной перспективе. Потому что сложные для тестирования конструкции также трудно тестировать в «реальных» сценариях, и они чаще всего негибкие и их трудно поддерживать / улучшать с течением времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...