четверг, 22 сентября 2011 г.

FEST Assertions

Чаще всего в статьях о юнит-тестировании упоминаются такие столпы как JUnit, TestNG, Mockito. О них все слышали, много пишут разных статей и обзоров. Но есть и менее известные библиотечки, которое очень удобны при написании юнит (и не только) тестов. Одна из них — Fest Assertions.

Её главным предназначением является помощь в написании ясных и человеко-читаемых утверждений (assertions) в тестах. Для того, чтобы вам было быстрее и удобнее их писать она использует т.н. fluent interface

Если вы используете Maven, то просто добавьте её в зависимости:

<dependency>
<groupId>org.easytesting</groupId>
<artifactId>fest-assert</artifactId>
<version>1.4</version>
<scope>test</scope>
</dependency>
view raw pom.xml hosted with ❤ by GitHub


Теперь вы можете использовать её в своих тестах. Например:

import static org.fest.assertions.Assertions.assertThat;
@Test
public void booleanAssertions() {
assertThat(true).isTrue();
assertThat(false).isFalse();
}
@Test
public void objectsAssertions() {
assertThat(null).isNull();
assertThat(new Object()).isNotNull();
}
@Test
public void equalsAssertions() {
final String actualValue = "test";
final String expectedValue = "test";
assertThat(actualValue).isEqualTo(expectedValue);
}


На домашней странице приведены ещё некоторые примеры использования assertThat() для коллекций, исключений и других объектов (нужно ли говорить, что вы можете написать также и свои?).

В чем удобства этой библиотеки?
  • всего один import
  • авто-дополнение методов в IDE
  • более читаемый код
  • независимость от тестового фреймворка (например, assertEquals() в JUnit и в TestNG имеет различный порядок аргументов. Если вы будете использовать fest, то в случае необходимости вам будет проще мигрировать на другой тестовый фреймворк)
Есть ли неудобства? Есть. Например, мне кажется очень неуклюжим и некрасивым то как реализовано переопределение сообщения об ошибке:

assertThat(page.userBarExists())
.overridingErrorMessage("user bar should exists")
.isTrue();


Во-первых, overridingErrorMessage() как-то слишком длинно. Во-вторых, его нужно обязательно вставить между объектом для сравнения и самим условием, из-за чего они "разрываются" и теряется та самая читабельность.

В остальном же библиотека мне показалась очень интересной и удобной.

Комментариев нет:

Отправить комментарий