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

时间:2012-06-07 16:55:38

标签: 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对象?

1 个答案:

答案 0 :(得分:2)

为什么这可能是错误的问题

您通常应该在需要时使用模拟:

  1. 避免测试被测设备外的系统行为。
  2. 避免昂贵的操作,例如系统间测试。
  3. 确保调用对象,但不关心结果。
  4. 在这种情况下,不清楚为什么要测试此行为,或者您希望结果是什么,或者您认为可能无法获得结果的原因。在大多数情况下,测试经过良好测试的外部库是不正确的。

    我认为正确的问题是

    因此,根据您真正想要测试的内容,您可能需要检查:

    1. 该方法是否引发任何异常。
    2. 是否实际从某个应该调用它的对象调用了您的方法。
    3. 但是,在这两种情况下,模拟库与包含真实证书作为夹具数据似乎没有任何实际好处。实际执行代码时,夹具比模拟更好。