Единичные тесты предназначены только для одного кода, который работает автономно внутри себя. Это означает, что он не зависит от других объектов, чтобы выполнять свою работу. Вы должны использовать mocks, если вы выполняете программирование с использованием Test-Driven или Test-First. Вы создадите макет (или заглушку, как мне нравится называть) функции, которую вы создадите, и установите определенные условия для прохождения теста. Первоначально функция возвращает false, и тест терпит неудачу, что ожидается ... тогда вы пишете код, чтобы выполнять настоящую работу, пока она не пройдет.
Но я думаю, что вы имеете в виду интеграционное тестирование, а не модульное тестирование. В этом случае вы должны использовать mocks, если вы ожидаете, что другие программисты закончат свою работу, и у вас нет доступа к функциям или объектам, которые они создают. Если вы знаете интерфейс, который, надеюсь, вы иначе насмехаетесь, бессмысленны и пустая трата времени, тогда вы можете создать тупиковую версию того, что вы надеетесь получить в будущем.
Короче говоря, насмешки лучше всего использовать, когда вы ждёте других и нуждаетесь в чем-то там, чтобы закончить свою работу.
Вам следует попытаться всегда вернуть значение, если это возможно. Иногда вы сталкиваетесь с проблемами, когда вы уже что-то возвращаете, но в C и C++ вы можете иметь выходные параметры, а затем использовать возвращаемое значение для проверки ошибок.
Для вашего последнего пункта проверьте: http://martinfowler.com/articles/mocksArentStubs.html, чтобы убедиться, что вы знаете о различиях. – Finglas
Вот хорошая прочитанная адресация на некоторые из этих вопросов: http://xunitpatterns.com/TestStrategy.html –