Предположим, у меня есть следующий класс:Minitest: тест интеграции, шаблон Шаблон и NotImplementedError
class AbstractClass
# code omitted
def get_from_api(data)
APIRequestClass.send_request(config_info: config_info(data))
end
# force subclass to add method w/ proper config hash
def config_info(data)
raise NotImplementedError
end
end
Я хочу написать интеграционный тест, который отправляет запрос в API. Однако для этого мне нужно определить config_info
. Вот одна из моих попыток сделать эту работу:
# abstract_class_test.rb
# once this works I would remove class declaration to helper file
require_relative '../test_setup'
class SpecificClass < AbstractClass
def config_info(data)
{
sample: "Foo",
data: data
}
end
end
class AbstractClassTests < MiniTest::Test
def setup
@instance = SpecificClass.new
end
def test_that_something_comes_back_from_api
puts @instance.config_info("data")
response = @instance.get_from_api("data")
assert_equal jobs.class, Array
end
end
puts
утверждение приводит к NotImplementedError
. У меня действительно есть два вопроса, связанных с тестом здесь: есть ли лучший способ написать тест интеграции в этом экземпляре (т. Е. Не определять SpecificClass
), а почему нет SpecificClass
'реализация config_info
в пути поиска метода? Существует также третий вопрос, зависящий от всего этого, а именно: есть ли лучший способ заставить конечного пользователя предоставлять информацию о конфигурации, необходимую для запроса API?
Update
На данный момент я просто проверить метод APIRequestClass.send_request
и передать в соответствующий хэш. Меня все еще интересуют вопросы, которые я задал выше, но, возможно, четвертый вопрос: есть ли существенное преимущество в тестировании этой функциональности на всем пути от AbstractClass
, а просто тестирование ее от APIRequestClass
?
Мне нужен абстрактный класс, поскольку это абстракция, которая будет использоваться во многих реализациях, каждая из которых имеет свои собственные перестановки на 'config_info'. И да, я думаю, что тестирование «APIRequestClass» имеет наибольший смысл. Благодарю. – aceofbassgreg