I think not. This way is substitution of method literal. But "self sends" stubbing required anonimous subclass creation with required methods overrides.
2011/7/19 Dennis Schetinin <[email protected]> > Can we test self sends this way? > > > 2011/7/19 Denis Kudriashov <[email protected]> > >> I should add it to Mocketry. >> >> 2011/7/19 Sean P. DeNigris <[email protected]> >> >> Ah, so the lookups are done once when the method is compiled and then >>> stored >>> in the CompiledMethod... >>> >>> My vision is to write something like: >>> cannedNow := DateAndTime stub: #now; andReturn: [ DateAndTime >>> year: 2011 >>> month: 12 day: 24 hour: 12 minute: 34 second: 55 ]. >>> testableClass := MyClass usingDouble: cannedNow. >>> >>> The first line seems easy, and for the second line, I have so far (very >>> rough, but working): >>> >>> | class copy | >>> class := MyClass. >>> copy := MyClass copy. >>> >>> copy methods do: [ :m | | classRef | >>> (m hasLiteralSuchThat: [ :l | ((l isKindOf: Association) >>> and: [ l key = >>> #DateAndTime])]) >>> ifTrue: [ | newMeth refIndex | >>> newMeth := copy methodDictionary at: m >>> selector put: m copy. >>> refIndex := newMeth >>> indexOfLiteralSuchThat: [ :l | ((l isKindOf: >>> Association) and: [ l key = #DateAndTime])]. >>> newMeth literalAt: refIndex put: >>> #DateAndTime->MockedClass ] ]. >>> ^ copy. >>> >>> Where CompiledMethod>>indexOfLiteralSuchThat: aBlock >>> "Answer the literal index of the argument, literal, or zero if >>> none." >>> 2 to: self numLiterals - 1 "exclude superclass + >>> selector/properties" >>> do: >>> [:index | >>> (aBlock value: (self objectAt: index)) ifTrue: [^index - >>> 1]]. >>> ^0 >>> >>> Thanks again. >>> Sean >>> >>> >>> -- >>> View this message in context: >>> http://forum.world.st/Stubbing-class-side-methods-tp3674065p3676637.html >>> Sent from the Pharo Smalltalk mailing list archive at Nabble.com. >>> >>> >> > > > -- > Dennis Schetinin >
