【问题标题】:Minitest::Mock and case statementsMinitest::Mock 和 case 语句
【发布时间】:2015-05-19 10:48:48
【问题描述】:

知道为什么下面的代码不起作用吗?

require 'minitest/mock'

test = Minitest::Mock.new
test.expect :class, Class

p case test
when Class
  'class'
else
  'nope'
end # => 'nope' … but should return 'class'

p test.class === Class # => true

【问题讨论】:

  • 不应该是case text.class吗?
  • Ruby case 在没有显式调用class 的情况下处理=== 比较,尽管对test.class 的结果进行显式比较可以使上述代码工作。
  • 问题是case语句在我无权访问的类中。
  • case 不使用对class 的任何显式调用来执行此处的比较,因此永远不会评估您的期望。这就是您需要问自己希望通过在被测对象上模拟class 来实现什么。我不清楚上面的代码是为了演示什么,但是当你的测试需要具有这种侵入性时,它通常是一种气味。
  • 所以没有办法让它工作?

标签: ruby mocking minitest


【解决方案1】:

Ruby case 无需显式调用class 即可处理=== 比较,尽管对test.class 的结果进行显式比较可使上述代码工作。

如果您不能这样做,正如您在上面所说的,您可能无法获得像这样的case 工作。我的猜测是 Ruby 对 case 的实现是用 C 实现的,所以 class 可能永远不会被调用并且期望永远不会满足。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-05
    • 1970-01-01
    相关资源
    最近更新 更多