Насмешливая стати c метод в Java - PullRequest
2 голосов
/ 08 марта 2020

Есть ли способ смоделировать для метода c модульного теста в Java без выполнения фактической реализации метода? Фактическая реализация запускает процесс, который не может быть выполнен в контексте модульного теста.


public class MyExecutor {

    public static int execute(...) {
        Process pr = Runtime.getRuntime().exec(...)
        int status = pr.waitFor();
        return status;
    }


public MyClass {

    public void methodToUnitTest(...){

        MyExecutor.execute(...)

    }

Я хочу смоделировать MyExecutor.execute и проверить его вызов и параметры при модульном тестировании MyClass.methodToUnitTest, но без фактического выполнения этого метода.

Я прочитал, что PowerMockito может имитировать stati c метод, но он не препятствует выполнению фактической реализации.

1 Ответ

0 голосов
/ 09 марта 2020

Оберните статистику c класса MyExecutor в нестати c класса. Извлеките методы вашего нового класса non-stati c в интерфейс. Замените зависимости на класс stati c интерфейсом - используйте внедрение зависимостей для предоставления MyExecutor экземпляров MyClass:

public MyExecutorAdapter implements Executor{

  public void execute() {
     MyExecutor.execute()    //call to static code
  }

}

public MyClass {
  private Executor myExecutor;

  public MyClass(Executor myExecutor){   //MyExecutorAdapter instance can be injected here
    this.myExecutor = myExecutor;
  }  

  public void methodToUnitTest(...){
    myExecutor.execute(...)
  }
}

Теперь, с помощью интерфейса, вы можете легко смоделировать или подделать реализация для целей тестирования. В вашем случае вам, вероятно, нужно иметь макет, чтобы проверить, был ли вызван метод execute.

Это в основном известно как Adapter pattern

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