Assertion based examples

Рубрика: Development, Groovy, Java | 24 April 2007, 15:25 | Vadim Voituk

Достаточно интересный метод демонстрации примеров нашел в книге “Groovy in Action“.

Суть состоит в том, что Dierk-Koenig, в отличии от принятого стиля оформления примеров:
“Вот код, а вот текст/скриншот того, что получается в результате”

или же
“А теперь мы напишем программу с ипользованием цикла while и посмотрим что она выведет на экран”,
использует утверждения (assertions) прямо в коде примера.
Причем всегда строит assert-выражение таким образом, чтоб результат был true.

Например:

[java]assert 1=1
assert "Java & the Groovy"=="Java & the Groovy"
// Именно так, потому как в Groovy сравнение проходит по значению[/java]

или

[java]def nick = 'Gina'
def book = 'Groovy in Action'
assert "$nick is $book" == 'Gina is Groovy in Action'[/java]

или

[java]def list = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
list.each() { item ->
assert item == list[item]
}[/java]

Получаются такие себе микро-тесты без тест-фреймворка.
В результате “правильная” программа-пример не выведет на экран ничего.

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

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

2 Responses to “Assertion based examples”

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

  1. schleicher

    Полностью согласен. Тоже читаю GINA и получаю удовольствие от процесса. И это несмотря на херовое знание языка. а assert – это имхо вообще достойная вещь. Мне показалось, что можно действительно без тестового каркаса подкреплять код элементами “контроля правильности”…
    невольно заметил, что сам стал применять…

  2. vadim

    И все-же assert-ы никак не смогут заменить какой-нить JUnit, и были добалены в Java скорее как средство локализации ошибок.
    Я то сам никак не могу заставить писать себя assert-ы, потому что мыслю ещё в терминах unit-тестов: “Вот тут надо написать unit-test, но так-как этот метод простой и нет желания что-либо дописывать – ну его впень…”
    А похорошему надо бы написать простенький assert.

Leave a Reply