Здесь я нашел (через , взломал что-то, что Michael Feathers говорит, что это может быть ответом:
Он говорит,
, тест А не является модульным тестом если:
- Это говорит с базой данных
- , Это связывается через сеть
- , Это касается файловой системы
- , Это не может работать в то же время, что и любой из Ваших других модульных тестов
- необходимо сделать специальные вещи к среде (такие как редактирование файлов конфигурации) для выполнения его.
Снова в той же статье он добавляет:
Обычно модульные тесты, как предполагается, являются маленькими, они тестируют метод или взаимодействие нескольких методов. Когда Вы вытягиваете базу данных, сокеты или доступ к файловой системе в Ваши модульные тесты, они больше не действительно о тех методах; они об интеграции Вашего кода с тем другим программным обеспечением.
Строка 3 работает, потому что t2 создается копией из ссылки возвращается getS ()
То, как вы определяете константой ссылку, возвращаемую getS (), подходит. Вы также можете использовать const-qualify getS (), например:
const vector<int>& getS()const;
, чтобы getS () мог быть вызван для const sys.
Строка 3 работает, потому что c ++ вызывает конструктор копирования для вектора.
Ваша функция возвращает ссылку, эта ссылка передается в конструктор копирования вектора, и создается ваша переменная t2.
] Это разрешено, поскольку конструктор копирования вектора не определен как явный.
Вы не можете защититься от этого с помощью общего типа. В вашем собственном классе вы можете явно отметить конструктор копирования, и присвоение не будет выполнено.
Вместо этого вы можете вернуть константный указатель. Это защитит от копирования, но может быть опасно, поскольку пользователи могут ожидать, что смогут передать указатель за пределы его допустимой области.
const vector<int>* getS() {return &s;} //(4)
Для типа int скопировать тривиально. Если вы помещаете туда объекты и у них есть Copy CTor, это также будет работать.
Сделайте это
const vector<int>& getS() const {return s;}
, чтобы функция также была объявлена как const.
И назовите это так
const vector<int> & t1 = my_sys->getS();