Вам не нужно явно ссылаться на std::cout
или std::endl
. Они оба включены в namespace std
. using namespace std
вместо использования оператора разрешения области видимости ::
каждый раз делает проще и чище.
#include<iostream>
#include<string>
using namespace std;
Я не думаю, что необходимо выбрать один по другому. У обоих есть их преимущества и недостатки, и оба - инструменты для Вашей панели инструментов. "Mockist" tdd делает Вас немного более гибкими в том, что можно протестировать, в то время как классический TDD делает тесты немного менее хрупкими, потому что они имеют тенденцию больше смотреть на входной/по сравнению с вывод вместо того, чтобы смотреть на фактическую реализацию. При выполнении mockist поблочного тестирования у меня, кажется, есть больше тестового повреждения при изменении реализации.
я пытаюсь использовать классический tdd каждый раз, когда возможный (хотя я часто использую платформу насмешки для установки тупиков быстро). Иногда я замечаю, что начинаю тестировать слишком много когда-то, или мне нужны слишком много объектов настроить тест. Именно тогда тестирование mockist может часто помогать Вам настроить меньшие тесты.
Это все довольно абстрактно, таким образом, я надеюсь, что имею смысл
Я являюсь все еще относительно новым в TDD - но способ, которым я преподавался/представлялся к различиям, состоял в том, чтобы думать о нем с точки зрения тестирования интеграции между классами и так, чтобы Вы не зависели от живых данных. Например, если у меня есть класс, который в значительной степени автономен - не зависящий от других классов, которые я создал для проекта, и это не выходит в живую data/dev среду для входа (как DB или API к системе) тогда, я только использовал бы классические модульные тесты в чем-то как NUnit или JUnit - но когда я начинаю тестировать взаимодействие между созданными классами - именно тогда это может вернуться к реальности удобное для насмешки других пользовательских классов и/или вне взаимодействия - так, чтобы можно было выбрать и протестировать код текущих классов, не пытаясь упорно искать потенциальную ошибку в других классах, которые Вы называете.
Вопрос о mockist или классическом tdd очень о том, какую часть Вашего приложения Вы тестируете. Если у Вас есть "стандартная" многоуровневая архитектура (как DDD, например), доменный слой обычно подходит для классического tdd, где Вы модульный тест путем установки объекта под тестом, назовите несколько методов и проверьте результат и/или состояние.
На otherhand при тестировании прикладных служб, контроллеров или логики представления, которую все, больше работы координирования, насмешки или блокирования часто необходимы для получения хороших тестов. Мой опыт состоит также в том, что эти классы имеют тенденцию называть другие слои (веб-сервис, datalayer...), который Вы действительно хотите дразнить или заблокировать. Этим модульным тестам также нужно больше кода установки, таким образом, необходимо только дразнить, когда Вы имеете к.
Мой совет состоит в том, чтобы пойти классик каждый раз, когда Вы можете и дразнить, когда Вы должны.
Вы можете посмотреть нашу книгу по адресу http://www.growing-object-orient-software.com/ . Он включает расширенный рабочий пример. В процессе написания мы обнаружили, что различие между состоянием и взаимодействием в значительной степени вводит в заблуждение и больше связано с подходом к объектно-ориентированному проектированию.