所以我无法模拟在C中实现的方法

时间:2011-03-12 15:56:32

标签: ruby

查看https://github.com/rails/rails/commit/1408b942d9c2c131a1cdcab97f49d74ce84dae38

我认为嘲笑意味着你可以嘲笑任何方法。不知道在C中实现的方法不能被模拟。为什么呢?

我想这意味着我真的不明白嘲讽是如何运作的。

2 个答案:

答案 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中实现。如果我错了,请纠正我。