【问题标题】:How to mock properly an openssl object in rspec?如何在 rspec 中正确模拟 openssl 对象?
【发布时间】:2012-06-07 16:55:38
【问题描述】:

我有一个方法:

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 对象?

【问题讨论】:

    标签: ruby rspec mocking tdd openssl


    【解决方案1】:

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

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

    1. 避免在被测单元之外测试系统行为。
    2. 避免昂贵的操作,例如系统间测试。
    3. 确保调用了一个对象,但您不关心结果。

    在这种情况下,不清楚为什么您要测试这种行为,或者您期望的结果是什么,或者为什么您认为您可能无法得到它。在大多数情况下,测试一个经过良好测试的外部库并不是正确的做法。

    我认为正确的问题是

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

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

    不过,在这两种情况下,模拟库与包含真实证书作为固定数据相比似乎没有真正的好处。 Fixtures 比模拟代码更适合实际执行代码。

    【讨论】:

    • 你是对的 - 没有任何理由测试外部库。我想测试这个方法有两个原因: 1. 如果成功,它会返回正确的哈希 2. 如果失败,它会引发我的自定义异常 你又是对的,在另一种方法中我存根这个人。我想在这种情况下添加夹具是正确的方法。谢谢!
    • 是的,这个案例我要用真实数据,谢谢! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-07
    • 2018-11-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多