Функция Assert в C с использованием функции cassert — Как я могу объявить переменные в тестовой функции?

#c

#c

Вопрос:

 #include <iostream>
#include <string>
#include <cassert>

using namespace std;

void test();

void test() { //my attempted test function in order to ensure the program works correctly

string answ1 = "noooooob";
string answ2 = "saaaaaadie";
string answ3 = "trish";

assert(answer(answ1) == "nob"); //this is where i get the compile error that "answer" not declared
assert(answer(answ2) == "sadie");
assert(answer(answ3) == "trish");

cout << "All test cases passed!" << endl;

}

int main() {

    int i = 0;
    string output;
    string input;
    char x;

    getline(cin, input); //input

    output  = input[0];
    x = input[0];


    while (i < input.length()) {

        i  ;
        if (input [i] != x) {
            output  = input[i];
        }
        x = input[i];
    }

    cout << output << endl;

    test();

    return 0;
}
 

Все, что я действительно спрашиваю, это как объявить переменную «answer» в функции assert. Возможно, я делаю это совершенно неправильно, и мои извинения, если это так. Я довольно новичок в области кодирования. Нужно ли мне создавать строку, которая будет проходить через текущий цикл for в моей основной функции? Любая помощь приветствуется.

Комментарии:

1. Прежде всего, заголовочные файлы не являются «библиотеками». Библиотеки могут иметь заголовочный файл, и есть некоторые библиотеки только для заголовков, которые имеют только заголовочные файлы, но они все еще являются заголовочными файлами и не часто называются «библиотекой».

2. Что вы хотите answer иметь в виду? Вы называете это переменной, но используете ее как функцию. (или, возможно, конструктор) Другими словами — что вы на самом деле пытаетесь протестировать ?

3. Во-вторых, assert это макрос, который обычно отключается в сборках типа release. Никогда не следует использовать assert для проверки вне отладки. Кроме того, assert приведет к сбою программы, что не очень удобно для пользователя.

4. Я настоятельно рекомендую использовать среду модульного тестирования, такую как Google Test или Boost unit test framework, вместо макроса assert. Это позволит вам выполнять тесты в не отладочных конфигурациях в дополнение к предоставлению выходных данных, не зависящих от компилятора.

5. И answer(answ1) не имеет смысла, особенно как часть assert . Что это вообще должно означать? Что такое answer ?

Ответ №1:

  1. Либо вы забыли включить заголовок, в котором вы определяете класс или функцию с именем answer
  2. или вам это не нужно, и вы просто добавляете строки:
 assert(answ1 == "nob"); // operator== kicks in
assert(answ2 == "sadie");
assert(answ3 == "trish");
 

Вы должны знать, что assert это функция только для отладки. Он ни к чему не компилируется в режиме выпуска.
Вероятно, вам следует пересмотреть свой подход к модульному тестированию, как предполагают комментарии (GTest подойдет).