我正在构建一个非常小的 gem 来读取图像数据格式并将图像返回为一个无聊的 ruby 数组或一个不错的narray,这取决于 a) 是否已请求 narray 和 b) 如果 narray gem 可用并且必需的。我的设计是,如果有人想使用 narray 他们可以,但他们必须事先明确要求它。读取图像数据时,我检查是否定义了 narray(已被要求),并简单地将警告添加到 msg 实例变量以供以后打印/记录。
我想对此进行测试(我使用 rspec2 和 mocha 进行模拟),但我对实际使用 rspec 有点陌生。我想做类似的事情:
it "should return an narray if requested" do
obj = NRead.new(@string, :bin => true, :narray => true)
obj.image_narray.should_not be_nil
end
it "should add an NArray Install message and not set the image_narray if NArray was not available" do
Object.stubs(:defined?).with(:NArray).returns(:false)
obj = NRead.new(@string, :bin => true, :narray => true)
obj.msg.should_not be_empty
obj.msg.grep(/Please gem install narray/).empty.should be_false
obj.image_narray.should be_nil
obj.image_ruby_array.size.should == @fixture_image_length
end
...但我一定错过了使用存根的意义,因为这种存根不会改变定义的行为?不管存根,定义?返回“真实”值(即,如果我取消注释代码中的 require,defined? 为 false 并且我的警告已成功添加)。
这甚至不值得测试吗?有一个更好的方法吗?任何想法将不胜感激。谢谢,