查看https://github.com/rails/rails/commit/1408b942d9c2c131a1cdcab97f49d74ce84dae38
我认为嘲笑意味着你可以嘲笑任何方法。不知道在C中实现的方法不能被模拟。为什么呢?
我想这意味着我真的不明白嘲讽是如何运作的。
答案 0 :(得分:4)
这与C中的模拟方法无关,只与方法依赖有关。
如果您仔细阅读,则提交声明模拟Time.now
不再对Date.today
产生影响。
在Ruby 1.8.7中,Date.today
在Ruby中实现,并且正在调用Time.now
。在较新的Ruby中,Date.today
位于C中,不会调用Time.now
。
答案 1 :(得分:0)
不确定是什么,因为Double Ruby https://github.com/btakita/rr似乎能够做到这一点:
require 'rubygems'
require 'test/unit'
require 'rr'
extend RR::Adapters::RRMethods
class MockTest < Test::Unit::TestCase
include RR::Adapters::TestUnit
def test_can_mock_c_method
a = [1,5,3]
mock(a).sort{'foo!'}
assert_equal 'foo!', a.sort
end
end
这是使用MRI 1.8.7,据我所知,Enumerable#sort和Array#sort在C中实现。如果我错了,请纠正我。