Модульное тестирование схожих функций - PullRequest
0 голосов
/ 27 февраля 2011

У меня есть функции-установщики, которые проверяют свои входные данные, передавая их в функцию проверки перед изменением личных переменных. Если данные недействительны, функции получателя выдают исключение. Как я могу объединить функции сеттера и функции проверки данных, не повторяя все мои входные тестовые примеры для каждого из них? Обе функции проверяют данные одинаково.

РЕДАКТИРОВАТЬ: Извините, я должен был включить код для начала.

setterFunction(String value) {
    if (valueValid()) {
        // Update member variable
    } else {
        throw new RuntimeException("Invalid Data");
    }
}

И valueValid (), и setterFunction не работают на одних и тех же значениях, поэтому я не хочу иметь дубликаты тестового кода.

Ответы [ 2 ]

0 голосов
/ 27 февраля 2011

Вы можете по-разному проектировать свои объекты. Пусть ваш объект определит конструктор, который требует минимального подмножества информации для правильного построения объекта. Затем используйте другой метод repInvariant () ( Liskov ), который проверит, что все внутренние переменные в объекте допустимы в комбинации.

Тогда, если у вас есть установщик, он может просто вызвать repInvariant () после установки переменной. Возможно, даже отменяя вызов метода set.

  public class A 
    public A(B b, Cc...) {
      this.b = b;
      ...
      this.repInvariant();
    }
    public void setB(B b) {
       var oldB = this.b;
       try {
         this.b = b;
         this.repInvariant();
       } catch (InvalidArgumentException e) {
         this.b = oldB;
         throw e;
       }
    }
    public void repInvariant() {
       if (this.b == null) {
          throw new IllegalArgumentException("B must not be null");
       } 
    }
  }
0 голосов
/ 27 февраля 2011

Я думаю, что было бы целесообразно проверить валидатор со всеми тестовыми примерами, а затем проверить, правильно ли установщик и получатель вызывают валидатор, используя простой случай или два.

Таким образом, если что-то не работает - вы также лучше понимаете, где находится ошибка (валидатор или установщики / получатели)

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