Minitest:集成测试、模板模式和 NotImplementedError
Minitest: Integration test, Template pattern and NotImplementedError
假设我有以下 class:
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 请求所需的配置信息?
现在我将简单地测试 APIRequestClass.send_request
方法并传入适当的散列。我仍然对我上面提出的问题很感兴趣,但也许第四个问题是:从 AbstractClass
开始一直测试此功能与从 APIRequestClass
开始测试相比是否有显着优势?
is there a significant advantage in testing this functionality all the way from AbstractClass, versus simply testing it from APIRequestClass?
看起来唯一被测试的是抽象 class 的未实现方法,所以也许不是?从某种角度来看,抽象 class 是特定 classes 的实现细节,因此测试特定 classes 可能更有意义。
is there a better way to force the end user to provide the configuration information needed to make the API request?
配置和数据似乎可以是 send_request
的两个独立的必需参数,它们在方法内部组合在一起。这可能会让你完全摆脱抽象 class。
is there a better way to write an integration test in this instance (i.e. not defining a SpecificClass)
根据上述内容,您可以测试配置和数据是否已正确组合到 APIRequestClass
上的 API 负载中。那时可能没有任何东西可以测试特定的 class。
假设我有以下 class:
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 请求所需的配置信息?
现在我将简单地测试 APIRequestClass.send_request
方法并传入适当的散列。我仍然对我上面提出的问题很感兴趣,但也许第四个问题是:从 AbstractClass
开始一直测试此功能与从 APIRequestClass
开始测试相比是否有显着优势?
is there a significant advantage in testing this functionality all the way from AbstractClass, versus simply testing it from APIRequestClass?
看起来唯一被测试的是抽象 class 的未实现方法,所以也许不是?从某种角度来看,抽象 class 是特定 classes 的实现细节,因此测试特定 classes 可能更有意义。
is there a better way to force the end user to provide the configuration information needed to make the API request?
配置和数据似乎可以是 send_request
的两个独立的必需参数,它们在方法内部组合在一起。这可能会让你完全摆脱抽象 class。
is there a better way to write an integration test in this instance (i.e. not defining a SpecificClass)
根据上述内容,您可以测试配置和数据是否已正确组合到 APIRequestClass
上的 API 负载中。那时可能没有任何东西可以测试特定的 class。