Mocha
을 간단한 코드로 사용하면 예상치 못한 방식으로 바뀌 었습니다. 무엇이 잘못되었는지 설명해 주시겠습니까?모카 : 왜 #caller 메서드를 스텁하지 못합니까?
A.new.m #=> "(irb):32:in `irb_binding'" (for example)
을하지만 caller
전화를 스텁하려는 경우, 일이 잘못되어 가고 :
require 'test-unit'
require 'mocha'
class A
def m
caller.first
end
end
그래서이 간단한 클래스를 사용하여, 우리는 최신 발신자를 얻을 수 있습니다.
a = A.new
a.stubs(:caller)
Mocha::ExpectationError: unexpected invocation: #<A:0x6aac20>.caller()
내 생각 엔 Mocha
소스를 확인하는 것입니다,하지만 난 나중에 할 것)
- 루비 1.9.3p194
- 시험 장치 2.5.0, 2.4.8을
- 모카 0.12.6
감사합니다. 참고로, 기본적으로'모카 '에'호출자'를 지금 스터 빙할 방법이 없습니다 .. –
그런 식으로 보입니다. 나는 모카가 스텁 (a : : 메서드)와 같은 것보다 더 멋진 스타일 인'a.stubs (: 메서드)'를 사용하기를 원한다는 것의 결과라고 생각합니다. 이것은 스텁을 설정하는 코드가 실행되는 것을 의미합니다. 객체의 컨텍스트 따라서 스텁 작성 프로세스에 사용 된 모든 메소드를 실제로 시도해도 객체의 스텁이 발생하기를 원할지라도이 문제를 일으킬 수 있습니다. 분명히, 선택된 모카 구문은 전반적으로 더 좋으며, 이와 같은 엣지 경우에는 문제가 발생합니다. – mikej
나를 위해 문제가있는 것 같습니다. 'Kernel'이'Object'에 포함되어 있기 때문에'Mocha'는'Kernel'에서'caller'를 호출하거나 다소 좋아할 수 있습니다. –