Это скорее вопрос предпочтения, но из трех я бы выбрал rspec или Test :: Unit. В последнее время RSpec подвергали критике за чрезмерную разработку, но мне действительно нравится:
- синтаксис сопоставителя (
value.should == 1
против assert_equal(value, 1)
)
- имена тестов не ограничиваются именами методов (
it "does something awesome" { ... }
против def test_it_does_something_awesome; ...; end
)
Вы можете достичь того и другого с помощью TestUnit с некоторыми вспомогательными библиотеками относительно легко ... но я просто предпочитаю использовать RSpec.
Когда вы пишете код и тестируете, обычно (всегда?) Лучше начинать извне в: IE, писать интеграционный тест (вошедший в систему пользователь нажимает кнопку, чтобы добавить товар в корзину за 5,00 долл., Затем проверяет и Платит с его кредитной карты $ 5,00). Таким образом, вместо того, чтобы тестировать поведение определенного класса (как вы делаете с модульными тестами), вам нужно будет создавать объекты в базе данных и делать вызовы get / post / etc., которые взаимодействуют с сайтом так же, как пользовательский веб-браузер. сделает ваш тест пронизывающим весь стек.
В последнее время мне нравилось использовать Steak внутри RSpec для моих интеграционных тестов (с использованием Capybara для облегчения веб-взаимодействия)
Как только вы построите свой внешний периметр, я бы порекомендовал вам сосредоточиться на модульных тестах.
Модульные тесты могут быть фантастическими для документирования поведения класса. Я группирую их по методам и описываю, что можно передать в метод и что я ожидаю получить.
describe Object do
describe "#method" do
it "returns 4 when passed 2" do
...
end
end
end