Как проверить метод, который упаковывает другой метод? - PullRequest
0 голосов
/ 24 октября 2018

Давайте представим, что класс (написанный на Java-подобном псевдокоде):

class MyClass {

    ...

    public List<Element> getElementsThatContains(String str) {
        return this.getElementsThatContains(new Set<String> { str });
    }

    public List<Element> getElementsThatContains(Set<String> strs) {

        ...

    }
}

Прежде всего - у меня getElementsThatContains(Set<String> strs) правильно покрыто на 100%.

Как мне охватить getElementsThatContains(String str):

  • Должен ли я копировать (почти) все тесты, но с вызовом getElementsThatContains(String str)?
  • Должен ли я сделать один метод тестирования, который проверял бы, совпадают ли результаты первого и второго методов (с одинаковыми входящими данными)?
  • Должен ли я выполнить рефакторинг своего кода, чтобы у меня не было такой ситуации?(Если да, то как?)

Ответы [ 2 ]

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

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

Но вам следует меньше заботиться о вашем покрытии линии .
Не поймите меня неправильно!Важно поддерживать высокий уровень покрытия линии.Но более важно иметь 100% охват поведением .И если вы встретите непроверенные строки, ваш вопрос должен звучать так: « Нужен ли этот непроверенный код (т. Е. Какое требование он выполняет) или он устарел?» .

Когда мы пишем наши тестыимея в виду покрытие строк , мы стремимся сосредоточиться на деталях реализации нашего тестируемого кода.Следовательно, наши тесты, скорее всего, не пройдут, если мы изменим подробности реализации (например, во время рефакторинг ).Но наши тесты должны проваливаться только в том случае, если проверяется поведение , а не когда мы изменяем способ достижения этого поведения.

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

Да, вы должны охватить оба метода.Причиной проведения юнит-тестов является защитная сеть при рефакторинге кода.Например, кто-то может реорганизовать реализацию 'getElementsThatContains (String str)', и он всегда будет возвращать пустой список.Несмотря на то, что getElementsThatContains (Set strs) имеет 100% покрытие, эти тесты не поймут этого.

Нет, вам не следует создавать один метод тестирования, который проверял бы, совпадают ли результаты первого и второго методов.Это обычно считается плохой практикой.Более того, если в одном методе есть ошибка, ваш тест просто проверит, что другой метод возвращает тот же неверный результат.

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

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