Ruby 如何在rspec中正确模拟openssl对象?

Ruby 如何在rspec中正确模拟openssl对象?,ruby,rspec,mocking,tdd,openssl,Ruby,Rspec,Mocking,Tdd,Openssl,我有一个方法: require 'openssl' def extract_creds(data) pfx = OpenSSL::PKCS12.new(data) { :certificate => pfx.certificate.to_pem, :key => pfx.key.to_pem } rescue # handle error end 我想为它写一个rspec示例。我应该如何正确模拟pfx对象?为什么这可能是一个错误的问题 当您想要: 避免在被测单元之外

我有一个方法:

require 'openssl'

def extract_creds(data)
  pfx = OpenSSL::PKCS12.new(data)

  { :certificate => pfx.certificate.to_pem, :key => pfx.key.to_pem }
rescue
  # handle error
end
我想为它写一个rspec示例。我应该如何正确模拟pfx对象?

为什么这可能是一个错误的问题 当您想要:

  • 避免在被测单元之外测试系统行为
  • 避免昂贵的操作,如系统间测试
  • 确保调用了对象,但不关心结果
  • 在这种情况下,不清楚您为什么要测试这种行为,或者您期望结果是什么,或者您为什么认为您可能得不到它。在大多数情况下,测试经过良好测试的外部库不是正确的做法

    我认为正确的问题是 因此,根据您真正想要测试的内容,您可能需要检查:

  • 该方法是否引发任何异常
  • 您的方法是否实际是从某个应该调用它的对象调用的

  • 不过,在这两种情况下,模拟库与将真正的证书作为夹具数据相比,似乎没有什么真正的好处。在实际执行代码方面,fixture比mock更好。

    你说得对-没有任何理由测试外部库。我想测试这个方法有两个原因:1。如果成功,则返回正确的哈希值2。如果失败了,它会引发我的自定义异常,而您又是对的,在另一种方法中,我会存根这个家伙。我想在这种情况下添加fixture是一种正确的方法。谢谢是的,我要用真实的数据来处理这个案子,谢谢!:)