Я пытаюсь выполнить модульное тестирование функции, которая мгновенно возвращает результат, а затем возвращает реальный результат с помощью функции обратного вызова. Кто-нибудь может мне помочь в том, как провести модульное тестирование этой функции с помощью cppunit.
например,
MyFunction (обратный вызов)
{
…..
}
MyFunction немедленно возвращает успех, а затем фактический результат в функции обратного вызова, из обратного вызова выдается исключение myexception, как я могу выполнить модульное тестирование, чтобы убедиться, что выбрасывается myexception?
Единственный способ мгновенного возврата MyFunction — создать рабочий поток, который в конечном итоге вызывает функцию обратного вызова. Если это так, то невозможно отловить в вашем коде исключение, выброшенное из этого рабочего потока. Вы должны перехватить все исключения внутри рабочего потока и обработать их там. В обработчике исключений вы все равно можете вызывать функцию обратного вызова с параметрами, обозначающими возникновение исключения, и таким образом информировать об этом пользователя.
я хотел бы использовать 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
}