3

cmocka を使用して、画面にデフォルトの結果を表示できます。単体テストの結果を JUnit 形式で取得したいと考えています。

CMocka は、env 変数CMOCKA_MESSAGE_OUTPUTまたは API を使用して JUnit 形式をサポートします。cmocka_set_message_output(CM_OUTPUT_XML);

しかし、まだxmlファイルは生成されません。JUnit形式で結果を取得するのを手伝ってくれる人はいますか?

4

2 に答える 2

6

最も信頼できるソースは、実際にcmocka.cは、フレームワークの実装全体を含むソース ファイルです。このファイルはそれほど大きくないので、ソース ファイル バージョン 1.0.1 から何かを引用します。

cmocka で XML 出力を生成するには 2 つの条件があり、3 つ目の条件は出力をファイルに保存するために必要です。

1. XML 出力は、テストが呼び出された場合にのみ生成できます。cmocka_run_group_tests()

cmocka_run_group_tests()カスタマイズ可能な出力形式は、テスト ランナーまたはその完全なバリエーションからのみ取得できますcmocka_run_group_tests_name()

XML 出力につながる他のルートはありません。シングル テストが開始された場合run_test()、出力を XML にすることはできません。

要約形式

[  PASSED  ] 0 test(s).
[  FAILED  ] 1 test(s), listed below:

次のいずれかの場合に生成できます。

  • テストは非推奨のテスト ランナーの 1 つによって開始されます: run_tests()_run_tests()または; その場合、廃止された関数の使用に関するコンパイル警告を表示することさえ可能です。run_group_tests()_run_group_tests()
  • テストは によって開始されcmocka_run_group_tests()、出力形式はCM_OUTPUT_STDOUTです。

2. cmocka メッセージ出力は次のように設定する必要があります。CM_OUTPUT_XML

デフォルトの出力形式は、cmocka_set_message_output(CM_OUTPUT_XML)テストを実行する前に呼び出すことで設定できます。ただし、そのようなデフォルトがテスト ソースに設定されていても、環境変数によって上書きされる可能性がありますCMOCKA_MESSAGE_OUTPUT。その変数は、 によって設定されたデフォルトよりも優先度が高くなりますcmocka_set_message_output()

の値CMOCKA_MESSAGE_OUTPUT大文字と小文字を区別しません。変数は、次のいずれかの値に等しい場合に考慮されます: stdoutsubunittabまたはxml

したがって、環境変数に値がある場合stdout、関数mocka_set_message_output()は効果がありません。

その変数を使用して、既にコンパイルされたバイナリの異なる出力形式を強制することができます。

CMOCKA_MESSAGE_OUTPUT=stdout ./nulltest
CMOCKA_MESSAGE_OUTPUT=subunit ./nulltest
CMOCKA_MESSAGE_OUTPUT=tap ./nulltest
CMOCKA_MESSAGE_OUTPUT=xml ./nulltest

したがって、テストが開始されcmocka_run_group_tests()ても出力が影響を受けない場合は、シェルにmocka_set_message_output()変数が設定されていることを意味します。CMOCKA_MESSAGE_OUTPUT=stdout

3. cmocka で新しいファイルを作成して、XML 出力をそのファイルに直接書き込むことができるはずです。

上記の両方の条件が満たされている場合、cmocka にその XML 出力をファイルに直接書き込むように指示することができます。環境変数CMOCKA_XML_FILEが設定されている場合、cmocka はその変数値の名前で XML をファイルに書き込もうとします。

使用例:

CMOCKA_XML_FILE='./out.xml' CMOCKA_MESSAGE_OUTPUT=xml ./nulltest

ファイルは次の場合に書き込まれます。

  • そのような名前のファイルは存在しません。
  • このようなファイルを作成できます。

したがって、1 つのコンパイル済みバイナリ テスト アプリケーションに複数のテスト ランナーがある場合、最初のランナーのみがその出力をそのファイルに書き込むことができます。

が設定されていても、出力はシェルに書き込まれCMOCKA_XML_FILEますが、ファイルが既に存在するか、作成できません。

もちろん、シェル出力をファイルにリダイレクトして、既存のファイルを上書きするか、既存のファイルが存在する場合は追加することもできます。

次の例を使用して、出力のさまざまなオプションを確認できます。コマンドでビルドできる

gcc -g nulltest.c -o nulltest -Ipath_to_cmocka_headers -Lpath_to_cmocka_library_binary -lcmocka

nulltest.c

#include <stdarg.h>
#include <stddef.h>
#include <setjmp.h>
#include <cmocka.h>

/* A test case that fails. */
static void null_test_failed(void **state) {
    (void) state; /* unused */
    assert_int_equal(0, 1);
}

int main(void) {
    const struct CMUnitTest tests[] = {
        cmocka_unit_test(null_test_failed),
    };
    const struct UnitTest tests_deprecated[] = {
        unit_test(null_test_failed),
    };

    cmocka_set_message_output(CM_OUTPUT_XML);

    /* group test functions that use customizable output format */
    cmocka_run_group_tests(tests, NULL, NULL);
    cmocka_run_group_tests_name("custom group name", tests, NULL, NULL);

    /* run single test with standard output */
    run_test(null_test_failed);

    /* DEPRECATED TEST RUNNER functions that can give only standard output */
    run_tests(tests_deprecated);
    _run_tests(tests_deprecated, 1);
    run_group_tests(tests_deprecated);
    _run_group_tests(tests_deprecated, 1);

    return 0;
}
于 2015-10-24T18:50:02.047 に答える
1

XML は stdout に出力されます。ファイルにリダイレクトする必要があります...

于 2015-09-03T09:44:38.190 に答える