Как я могу уменьшить количество непокрытых ветвей в этом коде, содержащем оператор std::string+?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Как я могу уменьшить количество непокрытых ветвей в этом коде, содержащем оператор std::string+?

Сообщение Anonymous »


Я использую lcov2.0 для проверки покрытия своей тестовой ветки и столкнулся с этой проблемой.

// исходный код void test_string_plus (константная строка и локальная, константная строка и удаленный) { статическая строка Recv_msg; static_cast(recv_msg.assign("/" + (local < удаленный ? локальный + "_" + удаленный: удаленный + "_" + локальный))); } // тестовый код ТЕСТ(тестовая строка, тестовая строкаплюс) { строка локальная = «тест1»; строка удаленного = «test12»; EXPECT_NO_THROW(test_string_plus(локальный, удаленный)); местный = "test21"; удаленный = «тест2»; EXPECT_NO_THROW(test_string_plus(локальный, удаленный)); } В lcov сообщается вот так

281: 2: void test_string_plus(const string& local, const string& Remote) 282 : : { 283:2: статическая строка Recv_msg; 284 [ + + + - : 2 : static_cast(recv_msg.assign("/" + (local < удаленный ? локальный + "_" + удаленный : удаленный + "_" + локальный))); + - + - + - + - + + + + - - - - ] 285 : 2 : } Файл gcov показывает, что этот код содержит множество непокрытых ветвей с throw.

2: 284: static_cast(recv_msg.assign("/" + (local < удаленный ? локальный + "_" + удаленный : удаленный + "_" + локальный))); звонок 0 вернулся 2 ветвь 1 занята 1 (провал) ветка 2 занята 1 звонок 3 вернулся 1 ветка 4 занята 1 (провал) ветка 5 взята 0 (выбросить) звонок 6 вернул 1 ветвь 7 занята 1 (провал) ветка 8 взята 0 (выбросить) звонок 9 вернулся 1 ветка 10 занята 1 (провал) ветка 11 взята 0 (выбросить) звонок 12 вернул 1 ветка 13 занята 1 (провал) ветка 14 взята 0 (выбросить) звонок 15 вернулся 2 ветка 16 занята 2 (провал) ветка 17 взята 0 (выбросить) звонок 18 вернул 2 звонок 19 вернул 2 звонок 20 вернулся 2 ветка 21 занята 1 (провал) ветка 22 занята 1 звонок 23 вернулся 1 ветка 24 занята 1 (провал) ветка 25 занята 1 звонок 26 вернулся 1 вызов 27 никогда не выполнялся ветка 28 никогда не выполнялась ветка 29 никогда не выполнялась вызов 30 никогда не выполнялся ветка 31 никогда не выполнялась ветка 32 никогда не выполнялась вызов 33 никогда не выполнялся 2:285:} версия инструментов и команда, которую я использовал.
[*]g++/gcov (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0 [*]gtest 1.12.x [*]lcov/genhtml: LCOV версии 2.0–1
g++ -std=c++17 test.cpp -o test -lgtest -lgtest_main -pthread -fprofile-arcs -ftest-coverage -fprofile-update=atomic && \ ./тест && \ gcov -b -c -o . test.cpp && \ lcov --захват \ --rc Branch_coverage=1 \ --каталог. \ --filter ветка \ --output-file покрытия_all.info \ --ignore-errors несоответствие && \ genhtml покрытия_all.info \ --rc Branch_coverage=1 \ --output-directory report_report && \ rm *.info Я уже использовал --filter Branch, чтобы игнорировать некоторые недоступные ветки

Как мне здесь уменьшить количество непокрытых ветвей? Или я могу их просто игнорировать?

https://legacy.cplusplus.com/reference/ ... operator+/

Я извлекаю ссылку на operator+() в std::string. Кажется, что исключение будет выдано только при попытке добавить строку, длина которой превышает предел, или при сбое приложения памяти, но в практических проектах построение таких тестовых условий весьма неразумно.

Я пытался изменить ?:, чтобы в противном случае ветки, вызванные строкой, можно было фильтровать.
281: 2: void test_string_plus(const string& local, const string& Remote) 282 : : { 283:2: статическая строка Recv_msg; 284: 2: строковая цель («/»); 285 [ + + ]: 2 : if(local
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • `std::map<std::string, enum{1, 2, 3, 4}>` (или std::map<std::string, tuple<bool, bool>>`) кэширует` против `std: :set<st
    Anonymous » » в форуме C++
    0 Ответы
    327 Просмотры
    Последнее сообщение Anonymous
  • Std: Переместите std :: string из std :: deque then std :: deque :: pop_front?
    Anonymous » » в форуме C++
    0 Ответы
    68 Просмотры
    Последнее сообщение Anonymous
  • Std: Переместите std :: string из std :: deque then std :: deque :: pop_front?
    Anonymous » » в форуме C++
    0 Ответы
    34 Просмотры
    Последнее сообщение Anonymous
  • Назначьте ввод Map> выходу Map>
    Anonymous » » в форуме JAVA
    0 Ответы
    125 Просмотры
    Последнее сообщение Anonymous
  • Конвертировать Map > для списка > используя API потока
    Anonymous » » в форуме JAVA
    0 Ответы
    102 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C++»