как выполнить модульное тестирование исключения из функции обратного вызова

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

например,

MyFunction (обратный вызов)
{
…..

}

MyFunction немедленно возвращает успех, а затем фактический результат в функции обратного вызова, из обратного вызова выдается исключение myexception, как я могу выполнить модульное тестирование, чтобы убедиться, что выбрасывается myexception?

0

Решение

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

3

Другие решения

я хотел бы использовать XUnit ++, и сделать это в два этапа: тест MyFunctionи проверить обратный вызов.

FACT("MyFunction returns immediately")
{
struct callback
{
callback()
: success(false)
{
}

void operator()() const
{
if (!success)
{
Assert.Fail() << "MyFunction executed callback before returning.";
}
}

bool success;
} cb;

MyFunction(cb);

cb.success = true;
}

FACT("The real callback throws an exception when complete")
{
auto e = Assert.Throws<MyException>(myCallback);

// further asserts for the value of e
}
0