2016-11-01 18:27 GMT+01:00 Attila Magyar <m.magyar3@gmail.com>:
They have strings. And first mock libraries used message names as strings
They are not the same. Method rename and find senders works with symbols but not with strings. Some rarely used refactorings might not work, although this is probably a technical limitation of the refactoring engine and not a conceptual one.
No matter. This is what we have. And with message based approach this problem not exists at all. 2016-11-01 18:27 GMT+01:00 Attila Magyar <m.magyar3@gmail.com>:
not believe that anybody would prefer writing
In Ruby this would look like something like this.
allow(socket).to receive(:connect).with(address, port, timeout) { do_something }
This is exactly what I said: with C-like syntax it is normal but not with keyword messages.
Not so different and many people use this. Probably lot more than the users of Mocketry + BabyMock together.
(Anyways probably I wouldn't use a mock library to stub an object like a socket. It is not my own type, too low-level abstraction. It results brittle tests no matter what syntax is used.)
It was just example where everybody could see agliness of string based approach.
It leads to more code which you will write again and again in your tests
If I have too many code for setting up expectations and mocks that is a clear clue that something went wrong in my test,
I use mocks in most unit tests. So in every test I will need to repeat all this code.
and I rather have a mock library that makes this painful early on. It is really easy to make a mess with mock object based tests. This is why I still prefer jMock over any other mock object library (mockito, easymock) in Java. JMock is a highly opinionated library that deliberately doesn't support features like deep stubbing, partial mocking and other black magic stuffs. BabyMock follows a similar philosophy.
Smalltalk is super powerful language which allows easily create and run tons of spaghetti code. But with C++ it is sometime impossible to just compile spaghetti code. So C++ prevents programmers from writing bad code because without discipline you can't run your program. So if you want to be good programmer choose C++. (sorry for sarcasm)