Как написать сопоставители для всех важных тестовых библиотек?

В настоящее время я расширяю Degraph для проверки нарушений правил зависимости.

До сих пор я создавал сопоставители для ScalaTest, так как это моя любимая тестовая библиотека для JVM. Но многие другие предпочитают или вынуждены использовать другие библиотеки. Поэтому я хотел бы предоставить сопоставители (или что-то еще, что является подходящим эквивалентом) и для них.

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

Итак, вопрос:

Есть ли какая-то библиотека сопоставления, которую можно использовать во всех (или в большинстве/многих) тестовых библиотеках? Или, может быть, обертка, которая преобразует сопоставители Hamcrest в сопоставители для всех других библиотек?

Библиотеки, которые я хотел бы поддерживать (в порядке важности):

  • Юнит
  • ScalaTest
  • самая популярная тестовая библиотека для Groovy
  • самая популярная библиотека тестирования для Clojure
  • Характеристики2
  • TestNG

person Jens Schauder    schedule 29.03.2013    source источник


Ответы (1)


  1. Каждая среда модульного тестирования, которую я видел, провалит тест, выдающий исключение.
  2. assertThat(T value, Matcher<T> matcher) Хэмкреста выдаст AssertionError, если matcher.matches(value) вернет false.

Таким образом, Hamcrest должен работать «из коробки» с большинством сред тестирования. Для других библиотек, например для создания фиктивных объектов, вам нужно либо использовать объекты Hamcrest Matcher изначально, либо написать слой интеграции. Одним из способов было бы создать метод для украшения любого сопоставления, например *,

ArgumentMatcher<T> decorate(final Matcher<T> matcher) {
    return new ArgumentMatcher() {
        public boolean <T> accepts(T value) {
            return matcher.matches(value);
        }
    }
}

* Это надуманный пример с использованием теоретического Mocking API.

person David Harkness    schedule 04.04.2013
comment
Ты прав. Я думаю, можно хотя бы написать эквивалент myMatcher.match(value) во всех тестовых фреймворках. - person Jens Schauder; 04.04.2013