Ложные внешние вызовы методов из класса In Juints

Я пытаюсь высмеять вызов экземпляра другого класса из моего класса. Проблема, которую я вижу, заключается в том, что, похоже, мой фиктивный объект не заменяется реальным объектом при запуске теста. Я сделал простой пример, чтобы объяснить случай. Здесь я хочу напечатать tada вместо this is awsome какой метод printAwsome() делает по умолчанию. Я поместил свой код в ссылку ниже для справки, пожалуйста, дайте мне знать, что я делаю не так, если что-нибудь.

https://gist.github.com/anonymous/1eab366c60efb75b9075f100a67c851b

ExcelSupporTest печатает this is awsome вместо tada когда я пытаюсь издеваться optionPane.printAwsome() может кто-то указать мне, что я здесь делаю неправильно.

2 ответа

На что я могу вывести форму вопроса, пытаетесь ли вы издеваться над вызовом метода showMessageDialogпопробуйте издеваться DefaultOptionPane следующее:

DefaultOptionPane defaultOptionPane = mock(DefaultOptionPane.class);
when(defaultOptionPane.showMessageDialog(anyObject(), anyObject(), anyString(), anyInt()))
                .then(//do what you want to do here <Answer>);

То, что это просто означает, так как его читабельно, а также, когда вы звоните showMessageDialog с любым набором параметров вы хотите вернуть то, что вы заявляете как Answer в then,

Короче говоря, если вы не передадите его в качестве параметра методу, вы не сможете высмеять вызов метода.

Это становится проблемой с областью видимости, поэтому замените это

   public void testMethod() {
        DefaultOptionPane optionPane = new DefaultOptionPane();
        System.out.println("Entering method");
        optionPane.printAwsome();
        System.out.println("Exiting Method");
      }

с этим

 public void testMethod(DefaultOptionPane optionPane) {

        System.out.println("Entering method");
        System.out.println(optionPane.printAwsome());
        System.out.println("Exiting Method");
    }

и тогда вы можете издеваться optionPane

Другие вопросы по тегам