0

即座に戻り、コールバック関数によって実際の結果を返す関数を単体テストしようとしています。cppunitを使用してこの関数をユニットテストする方法を教えてもらえますか?

たとえば。

MyFunction(コールバック呼び出し){....。

}

MyFunctionはすぐに成功を返し、コールバック関数で実際の結果を返します。コールバックから例外myexceptionがスローされます。ユニットテストを実行して、myexceptionがスローされていることを確認するにはどうすればよいですか。

4

2 に答える 2

3

MyFunctionが即座に戻る唯一の方法は、最終的にコールバック関数を呼び出す作業スレッドを用意することです。その場合、その作業スレッドからスローされた例外をコードでキャッチすることはできません。作業スレッド内からすべての例外をキャッチし、そこで処理する必要があります。例外ハンドラーでは、例外が発生したことを示すパラメーターを使用してコールバック関数を呼び出すことができるため、ユーザーにそのことを通知します。

于 2012-11-02T09:59:24.780 に答える
0

xUnit ++を使用し、これを2つの段階で実行し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
}
于 2012-11-02T12:51:13.880 に答える