cmocka を使用して、画面にデフォルトの結果を表示できます。単体テストの結果を JUnit 形式で取得したいと考えています。
CMocka は、env 変数CMOCKA_MESSAGE_OUTPUT
または API を使用して JUnit 形式をサポートします。cmocka_set_message_output(CM_OUTPUT_XML);
しかし、まだxmlファイルは生成されません。JUnit形式で結果を取得するのを手伝ってくれる人はいますか?
cmocka を使用して、画面にデフォルトの結果を表示できます。単体テストの結果を JUnit 形式で取得したいと考えています。
CMocka は、env 変数CMOCKA_MESSAGE_OUTPUT
または API を使用して JUnit 形式をサポートします。cmocka_set_message_output(CM_OUTPUT_XML);
しかし、まだxmlファイルは生成されません。JUnit形式で結果を取得するのを手伝ってくれる人はいますか?
最も信頼できるソースは、実際に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:
次のいずれかの場合に生成できます。
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
は大文字と小文字を区別しません。変数は、次のいずれかの値に等しい場合に考慮されます: stdout
、subunit
、tab
または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;
}
XML は stdout に出力されます。ファイルにリダイレクトする必要があります...