Я не знаю, является ли это наилучшей практикой, но вот что я делаю.
Вместо того, чтобы все объекты, с которыми я хочу играть, были созданы в setup
, у меня есть методы для создания определенного объекта,например create_credit_card_already_expired
, create_credit_card_stolen
, create_credit_card_valid
.Иногда я помещаю эти методы в модуль, чтобы их можно было использовать для разных классов тестовых случаев.Я также создаю собственные методы утверждения, такие как assert_credit_card_rejected
.
. Пример кода для меня будет
require "test/unit"
module TestCreditCardHelper
def assert_credit_card_rejected(credit_card, failure_message)
assert credit_card.rejected?, failure_message #A real method might be more complicated
end
def create_credit_card_stolen
CreditCard.new(:stolen => true)
end
end
class TestCreditCard < Test::Unit::TestCase
include TestCreditCardHelper
def test_stolen_credit_card_rejected
credit_card = create_credit_card_stolen
assert_credit_card_rejected(credit_card, "Doesn't reject stolen credit cards")
end
end