Test interface, not implementation

Hej,
jest taka zasada: ‘Test interface, not implementation’, ale jak się to ma do mockowania które zakłada, że zostaną wykonane określone metody?

Zależy głównie co mockujesz. Jeśli mockujesz zewnętrzny interfejs innych obiektów, to spoko. Jeśli mockujesz wewnętrzne metody testowanego obiektu, to nie jest koszerne.

Ja bym jeszcze dodał, że choć zwykle na interfejs patrzymy jednostronnie, tzn. co możemy wywołać w danej klasie, to faktycznie interfejs jest dwustronny. Czyli testowanie jakie metody dana klasa wywołuje w kooperujących obiektach (albo jakie API woła dany serwis) jest jak najbardziej testowaniem interfejsu.

Nie powinno sie zdarzyc, by mockowac prywatne metody(implementacje)
polecam: https://speakerdeck.com/skmetz/magic-tricks-of-testing-railsconf

@usek właśnie mnie ta prezentacja natchnęła do utworzenia tego wątku.

Dzięki za odpowiedzi, trochę mi się rozjaśniło.