2015-02-22 2 views
0

Предположим, у меня есть следующий класс: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?

ответ

1

Есть ли существенное преимущество в тестировании этой функциональности на всем пути от AbstractClass, а просто тестирование ее из APIRequestClass?

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

Есть ли лучший способ заставить конечного пользователя предоставить информацию о конфигурации, необходимую для запроса API?

Кажется, что конфигурация и данные могут быть двумя отдельными требуемыми параметрами до send_request, которые объединены внутри метода. Это может заставить вас отказаться от абстрактного класса.

есть лучший способ, чтобы написать тест интеграции в этом случае (т.е. не образующую SpecificClass)

Следуя из вышесказанного, можно проверить, что конфигурация и данные надлежащим образом объединены в Полезная нагрузка API на APIRequestClass. В этот момент может быть или не может быть ничего, что можно было бы проверить на конкретном классе.

+0

Мне нужен абстрактный класс, поскольку это абстракция, которая будет использоваться во многих реализациях, каждая из которых имеет свои собственные перестановки на 'config_info'. И да, я думаю, что тестирование «APIRequestClass» имеет наибольший смысл. Благодарю. – aceofbassgreg