Как смоделировать вывод метода экземпляра для экземпляра тестируемого класса? - PullRequest
0 голосов
/ 30 июня 2018

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

Не фактический код, а эквивалент:

public class A{
    public String[][][] m1(String[][][] arg1){
        ArrayList<String[]> arg2 = new ArrayList<>();
        String[][][] response = m2(arg1, arg2);

        if (response == null)
            return arg1;
        else
            return response;
    }

    public String[][][] m2(String[][][] arg1, ArrayList<String[]> arg2){
        return new String[][][]{{{}}};
    }
}

Так что здесь я бы тестировал возвращаемые значения метода m1, но хотел бы посмеяться над возвращением метода m2

1 Ответ

0 голосов
/ 30 июня 2018

Как упомянул @GhostCat, использование Mockito Spies было бы хорошим решением.

В идеале, вам не нужно было бы имитировать метод экземпляра для тестирования другого метода экземпляра в классе. Если вам нужно смоделировать этот метод экземпляра, возможно, он не принадлежит к тому же классу, что и другой метод экземпляра (взгляните на этот другой SO post ). Если это так, вы можете вытащить этот метод экземпляра в его собственный класс, а затем положиться на экземпляр этого класса (переданный конструктору) - тогда вы можете просто смоделировать класс с этим методом экземпляра при создании вашего класса в тест.

Или, возможно, вместо того, чтобы изолировать m1 и запустить модульный тест против m1, было бы лучше просто выполнить тест для класса, который проверяет поведение всего класса, а не только поведение метода с одним экземпляром.

В качестве альтернативы, если два метода экземпляра действительно принадлежат к одному и тому же классу, и абсолютно важно, чтобы вы тестировали методы по отдельности, а вы не использовали фальшивую среду. Вы могли бы создать подкласс класса A, который переопределяет m2 и возвращает фиктивный результат для того, что m2 обычно возвращает. Затем вы можете протестировать этот подкласс и успешно выполнить модульный тест m1.

Редактировать : Если m2 является более или менее вспомогательным методом, который на самом деле не требует отдельного тестирования, я бы сделал его закрытым, а затем вообще не проверял бы его, за исключением косвенного публичные методы класса.

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