Yes, but in that case you stub messages to the class itself. For your example it means:

Something stub askForName willReturn: 'new'.
Something��askForName��should be: 'new'



2017-10-20 13:58 GMT+02:00 Peter Uhn��k <i.uhnak@gmail.com>:
Thanks Denis, that did the trick.

But I thought that I can also mock at the class level (at least it was shown in the docs).

Peter

On Sat, Oct 7, 2017 at 11:24 AM, Denis Kudriashov <dionisiydk@gmail.com> wrote:
Hi Peter.

You should stub instance instead of class:
�� �� ��s := Something new.
�� �� ��s stub askFor...

7 ������. 2017 ��. 9:18 ������������������������ "Peter Uhn��k" <i.uhnak@gmail.com> ��������������:

Hi,

maybe I am missing something fundamental, because this seems like an obvious scenario

I have a class Something with two methods

Something>>askForName
^ UIManager default request: 'Name'

Something>>name
^ self askForName , ' suffix'

Now I want to mock out askForName, so I can run it automatically in tests...

I've tried just stubbing it...

SomethingTest>>testRenameStub
Something stub askForName willReturn: 'new'.
Something new name should be: 'new suffix'

however it still opens the window to ask for the name, so the original method is being called.

Right now I have to stub it with metalinks, which doesn't play well with some tools (hapao)

SomethingTest>>testRenameMeta
| link newName |
link := MetaLink new
metaObject: [ 'new' ];
control: #instead.
(Something >> #askForName) ast link: link.
[ newName := Something new name ]
ensure: [ link uninstall ].
self assert: newName equals: 'new suffix'

Thanks,
Peter