假设我有以下课程:
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
&# 39;在方法查找路径中实现config_info
?还有第三个问题悬停在所有这些问题上,即:是否有更好的方法可以强制最终用户提供发出API请求所需的配置信息?
更新
现在我只是测试APIRequestClass.send_request
方法并传入适当的哈希值。我对上面提到的问题仍然非常感兴趣,但也许第四个问题是:从AbstractClass
开始测试此功能是否有显着优势,而不是仅仅从{{1}进行测试}?
答案 0 :(得分:1)
从AbstractClass一直测试这个功能有什么显着的优势,而不是简单地从APIRequestClass测试它?
看起来唯一被测试的是抽象类的未实现方法,所以可能不是吗?从某个角度来看,抽象类是特定类的实现细节,因此测试特定类可能更有意义。
是否有更好的方法可以强制最终用户提供发出API请求所需的配置信息?
似乎配置和数据可能是两个单独的,send_request
所需的参数,它们在方法内部组合在一起。这可能会让你完全没有抽象课程。
是否有更好的方法在此实例中编写集成测试(即不定义SpecificClass)
根据上述内容,您可以测试配置和数据是否已正确合并到APIRequestClass
上的API有效负载中。此时可能会或可能没有任何东西可以在特定课程上进行测试。