我在c应用程序中运行了一个嵌入式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我无法真正测试它,但至少我能测试使用它的类,对吗?
答案 0 :(得分:0)
我认为你必须嘲笑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