Поэтому я не могу издеваться над методом, который реализован в C - PullRequest
4 голосов
/ 12 марта 2011

Посмотрите на https://github.com/rails/rails/commit/1408b942d9c2c131a1cdcab97f49d74ce84dae38

Я думал, что издевательство означает, что вы можете издеваться над любым методом.Не знал, что методы, которые реализованы в C, не могут быть опровергнуты.Почему?

Полагаю, это означает, что я не совсем понимаю, как работает издевательство.

Ответы [ 2 ]

4 голосов
/ 12 марта 2011

Это не имеет ничего общего с методами имитации в C и касается только зависимости метода.

Если вы внимательно читаете, фиксация констатирует, что имитация Time.now больше не влияет на Date.today.

В Ruby 1.8.7, Date.today был реализован в Ruby и вызывал Time.now.В более новом Ruby Date.today находится в C и не вызывает Time.now.

0 голосов
/ 12 марта 2011

Не уверен, что с этим, потому что 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. Пожалуйста, исправьте меня, если я ошибаюсь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...