2012-02-02 4 views
1

Я пишу модульные тесты для простой пользовательской модели в рельсах и только начал думать о том, как я пишу тесты.Должен ли я тестировать как положительные, так и отрицательные утверждения?

Там, кажется положительным тестирование:

test "password should match the password_confirmation " do 
    user = User.new(
    :email => "[email protected]", 
    :password => "password", 
    :password_confirmation => "password") 
    assert user.valid?, "did not save user even though password matches confimation" 
    end 

и отрицательные испытания:

test "password should not be valid with mismatching password_confirmation " do 
    user = User.new(
    :email => "[email protected]", 
    :password => "password", 
    :password_confirmation => "doesnotmatch") 
    assert user.invalid?, "saved user with mismatching password_confirmation" 
    end 

ли излишним включать оба теста в вашем наборе тестов, или это хорошая практика?

ответ

1

Посмотрите на TDD. When you can move on?, что объясняет, когда вы готовы к испытаниям (и коду) и можете двигаться дальше. В вашем примере это означает:

  • Вы сначала пишите положительный тест. Тест не проходит.
  • Затем вы записываете необходимый код, чтобы тест прошел успешно.
  • После этого вам нужно еще одно испытание, чтобы доказать, что вашей реализации недостаточно. Когда вы написали, например.

    class User 
        def initialize(hash) 
        @hash = hash 
        end 
        def valid? 
        true 
        end 
    end 
    

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

  • Напишите следующий тестовый пример, который показывает, что проверка пароля может завершиться с ошибкой.

Я вижу следующие случаи:

  • Нет пароля
  • Matching пароли (но слишком короткий)
  • Matching паролей (длинный и достаточно сложный)
  • Не соответствие пароля

Для этого вам понадобится 4 тестовых примера.

0

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

Смежные вопросы