Кто пишет unit-тесты и использует mock/stub, подскажите, пожалуйста, как вы обходите разность классов?
function main(MailClient client) {};
В тестах вы создаёте mock/stub объект класса MailClient, который по факту имеет класс a-la TestFrameworkMock.
И, получается, что на вход метода main() вы подаёте не объект класса MailClient, а объект класса TestFrameworkMock.
Хорошо, если ваш язык программирования с динамической типизацией и ему наплевать, что брать/отдавать.
Но есть языки или настройки над языками, которые имеют статическую типизацию.
Я пишу на Ruby, используют Contracts (надстройка, делающая из Ruby статически типизированный язык, условно, конечно).
На данный момент указываю в описании метода, что буду ждать один из двух классов.
Contract Or[Mongo::Client, RSpec::Mocks::InstanceVerifyingDouble] => Any
def initialize(mongo_client)
# some magic
end
Есть более красивые решения?