У меня есть макрос, который принимает функцию как аргумент, и функцию, которая берет его из макроса.

template <typename Function>
void SomeFunc(const Function func, const string func_str) {

}

#define SomeMacross(func)   SomeFunc((func), #func)

void SomeTest() {
}

int main()
{
SomeMacross(SomeTest);
}

Итак, как правильно выполнить этот модульный тест? Как я могу проверить, что эта функция void работает нормально?

c++
1
RDKru 4 Фев 2022 в 14:25
Что делать SomeTest?
 – 
Jarod42
4 Фев 2022 в 14:26
Какой-нибудь тест вроде assert (b==true)
 – 
RDKru
4 Фев 2022 в 14:27
Предполагая, что это функция void, она должна либо изменить что-то глобальное, либо напечатать материал. Вы можете проверить после вызова этой функции, изменилось ли что-то (что нужно изменить).
 – 
kiner_shah
4 Фев 2022 в 14:28
"Как я могу проверить, что эта функция void работает нормально?" - Без сообщения о статусе вы не сможете. globals (yuk), out-params или поместите тест там, где он принесет больше пользы: в SomeFunc
 – 
WhozCraig
4 Фев 2022 в 14:31

2 ответа

Ну, у каждой процедуры есть синхронизации и источники. Источниками в данном случае являются параметры. Функция должна отправлять информацию или что-то активировать в качестве синхронизации; иначе это было бы тривиальной рутиной. Вы проверяете эти результаты, однако они могут выйти.

2
CodeLurker 4 Фев 2022 в 14:30

Предполагая, что SomeTest является тестируемой здесь функцией, она, вероятно, будет читать и изменять глобальные переменные или выполнять системные вызовы каким-либо образом, в противном случае вы будете тестировать функцию, ничего не делая, поскольку она не имеет ни параметров, ни возвращаемого значения.

Вы ищете тест, адаптированный специально к побочным эффектам, которые должен иметь SomeTest. Если SomeTest должен создать файл "sometest.dat" после успешного завершения, ваш тест должен убедиться, что файл не существует до вызова SomeTest, и проверить, что файл существует после завершения SomeTest.

Вам в основном не хватает такой функции:

void SomeTestTest() {

    // prepare execution (i.e. delete previous test file)
    
    SomeTest()
    
    assert( postconditions ); // i.e.

}

Возможно, вы захотите изучить Unit Test Frameworks для этого, особенно если вы не хотите работать с простыми утверждениями.

2
gl1tor 4 Фев 2022 в 14:36