我有一个在ac应用程序中运行的嵌入式ruby解释器,以及一个充当c应用程序接口的ruby类。所以看起来像这样:
class MyApi
include RealCAPI
def api_method
some_call_to_c_api
end
end
在与api交互的ruby类中,我有类似的东西。我创建MyApi类的实例,然后在该实例上调用方法。
class Foo
def initialize
api = MyApi.new
...
...
end
def do_something
bar = api.api_method
...
...
...
final_result #is a function of Foo methods but depends on something from the api
end
end
我想用这样的东西测试Foo类:
describe Foo do
it "should do something" do
foo = Foo.new
expect(foo.do_something to eq("something")
end
end
问题在于,对api的任何调用都不会在c应用程序之外起作用。我该如何测试Foo课程?
我是否尝试以某种方式在c应用程序中进行测试?
我是否编写仅模拟MyApi类的独立测试,以模仿c应用程序中发生的情况?
我意识到,如果我模拟了api,我将无法真正对其进行测试,但是至少我将能够测试使用该API的类,对吗?
正如您所说,我认为您必须嘲笑api。这里要测试的是ruby代码,因此您可能应该坚持并仅测试ruby代码。
您最终会说一句:只要我的api能够执行某项操作,那么我的ruby代码就可以按照指定的方式工作。这很好,并且不依赖于您的api是否正常工作。
当然,您可能必须为您的api编写一些测试。但是将两个测试分开对我来说似乎是个好主意!
编辑
不确定这是否是您的问题,但是可以使用类似的方法轻松完成
it "should do something" do
MyApi.any_instance.stub(:ping).and_return("pong") #so that when foo calls ping, the api returns "pong"
foo = Foo.new
expect....
end
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句