// codeart.ru / Вопрос/Ответ / Нужно ли при первичной разработке теста искать наборы данных, приводящих к коллизии Форум

Нужно ли при первичной разработке теста искать наборы данных, приводящих к коллизии rss подписка

Автор: Evgeny Sergeev

При написании очередного теста возник такой вопрос: на сколько полным должен быть набор входных данных для теста. Допустим, мы создали реализацию, опираясь на тест только с одним набором данных. Тест проходит успешно и завершается зеленой полосой. Над кодом тестируемого класса выполнен рефакторинг. Что дальше?

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

Со своей стороны я больше склоняюсь ко второму варианту. По следующим причинам:

Во-первых, один пройденный тест - это всего лишь небольшой шаг к конечной реализации тестируемого класса. У программиста еще нет представления о том, какой будет конечный результат разработки и тратить время на поиск возможных багов неразумно.

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

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

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

P.s. обратил внимание, что в последнее время очень низкая активность в комментариях. Очень прошу не молчите, ведь я пишу не столько для себя, сколько для вас. Для меня лучше получить негативный комментарий, чем вообще ничего.

  1. можешь привести пример трех последних написанных тобой тестов?

  2. Alex, самые последние тесты:

    describe Phpbb_Poster do
    before(:each) do
    @phpbb_poster = Phpbb_Poster.new ‘http://www.pragmaticweb.ru’, ‘login’, ‘password’
    end

    it “Должен публиковать топики в форум на PHPBB” do
    @phpbb_poster.login
    @phpbb_poster.sid.length.should == 32
    @phpbb_poster.uid.should == ‘96′

    forums = @phpbb_poster.get_forums
    forums[9].should == ['10', 'Общие вопросы PHP']

    @phpbb_poster.get_attrs_from_newtopic_form forums[10][0]

    @phpbb_poster.lastclick.length.should == 10
    @phpbb_poster.form_token.length.should == 40
    @phpbb_poster.creation_time.length.should == 10
    @phpbb_poster.topic_cur_post_id == nil

    @phpbb_poster.publish(’Title’, ‘Content’, ‘8′).should > 0

    end

    it “Должен публиковать ответы к топикам на PHPBB” do
    @phpbb_poster.login
    @phpbb_poster.sid.length.should == 32
    @phpbb_poster.uid.should == ‘96′

    @phpbb_poster.get_attrs_from_newtopic_form ‘9′, ‘71′

    @phpbb_poster.lastclick.length.should == 10
    @phpbb_poster.form_token.length.should == 40
    @phpbb_poster.creation_time.length.should == 10
    @phpbb_poster.topic_cur_post_id.should == ‘103′

    @phpbb_poster.publish(’Title’, ‘Content’, ‘9′, ‘71′).should == 71

    end
    end

  3. Когда писал заметку имел в виду такой тест:

    it “должен получить из урла имя приложения и действия” do
    urls = [
    # url, application, action
    ['/notepad/edit', 'notepad', 'edit'],
    ['/notepad/edit/some/another/parts', 'notepad', 'edit'],
    ['/notepad/edit?some_url', 'notepad', 'edit'],
    ['/notepad/edit/some/part?another=part', 'notepad', 'edit'],
    ['/notepad', 'notepad', :default],
    ['/', 'default', :default],
    ['', 'default', :default]
    ]

    urls.each do |url, app, action|
    dispatcher = Dispatcher.new env(url), {}

    dispatcher.application.should == app
    dispatcher.action.should == action
    dispatcher.params.should == {}
    end
    end

    Это простенький диспетчер урлов. Пришел к выводу, что здесь надо ограничиться всего одни урлом и не городить огород.

  4. Alex, встречный вопрос. Можешь показать свои тесты?

Leave a Reply

« Фрилансинг. Легких денег не бывает! Рекомендации по написанию тестов с применением моков »