- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我能够使用 cmocka 并在屏幕上获得默认结果。我想获得 JUnit 格式的单元测试结果。
CMocka 通过使用环境变量 CMOCKA_MESSAGE_OUTPUT
或使用 API cmocka_set_message_output(CM_OUTPUT_XML);
但仍然没有生成 xml 文件。谁能帮忙获得 JUnit 格式的结果?
最佳答案
最可靠的来源实际上是包含整个框架实现的cmocka.c
源文件。这个文件不是太大,所以我将引用源文件版本 1.0.1 中的一些内容。
cmocka 生成 XML 输出有两个条件,第三个条件是将输出存储在文件中。
<强>1。仅当 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()
影响,则意味着存在设置变量 CMOKA_MESSAGE_OUTPUT= shell 中的标准输出
。
<强>3。应该可以通过 cmocka 创建一个新文件,将其 XML 输出直接写入该文件
如果前面两个条件都满足,则可以要求 cmocka 将其 XML 输出直接写入文件。如果设置了环境变量 CMOCKA_XML_FILE
,则 cmocka 将尝试将 XML 写入具有该变量值名称的文件。
使用示例:
CMOCKA_XML_FILE='./out.xml' CMOCKA_MESSAGE_OUTPUT=xml ./nulltest
文件被写入如果:
因此,如果在一个已编译的二进制测试应用程序中有多个测试运行程序,则只有第一个运行程序可以将其输出写入该文件。
即使设置了 CMOCKA_XML_FILE
,输出也会写入 shell,但文件已经存在或无法创建。
当然,可以将 shell 输出重定向到一个文件,覆盖现有文件或附加到现有文件(如果存在这样的文件)。
下面的示例可用于检查不同的输出选项。可以通过命令构建
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;
}
关于c++ - 如何获取 JUnit 格式的 CMocka 报告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32363479/
本着this question from JUnit 3 to JUnit 4的精神, 是否有任何正则表达式列表到 有效地从 junit 4 API 迁移到 junit 5 API ,不管代码大小?
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我需要以下测试 @runwith(cache, memory) class CollectionA is -- this is a suite (aka folder) class Cache {
当尝试在JUNITTEST的内存数据库中使用derby时,出现以下异常。 java.sql.SQLNonTransientConnectionException: Database 'memory:t
我需要以下测试 @runwith(cache, memory) class CollectionA is -- this is a suite (aka folder) class Cache {
这个问题在这里已经有了答案: 关闭 11 年前。 Possible Duplicate: How to run Junit testcases from command line? 如何在 Linu
可以将 Junitperf 与 junit4 一起使用吗?我有一个带有多个测试的简单 Junit4 测试类,我想对该类的单个测试进行 TimedTest。我该怎么做? 更清楚地说,我的 Junit4
我想将 JUnit 4 测试添加到使用 JUnit 3 测试套件(“AllTests”)来组织测试的遗留项目中。 测试已经用 JUnit 4 执行了,所以我知道 JUnit 4 测试在原则上是有效的。
我正在将我的代码库从 junit4 迁移到 junit5。我在我的测试用例中使用了 mockito。下面是我用于依赖项的不同版本。 5.2.0 1.2.0 1.10.19 or
我刚刚使用 qunit-reporter-junit 生成了以下 XML: 但是当我运行它时,我在以下位置找到了 xsd:http
我已经编写了一个自定义 JUnit 运行器,我希望它成为 eclipse 插件的一部分,该插件将使用该运行器启动测试,而无需将 @RunWith 注释应用于该类。我已经设法使用 org.eclipse
我发现我的Sonar实例5.1或5.1.1(带有最新的声纳运行器2.x)停止在项目的仪表板上显示部分单元测试信息(单元测试小部件)。 我拥有的属性是(在Gradle的sonarRunner> sona
我有一个 JUnit 测试。但是当我使用“Run as -> JUnit”时它会成功,而当我使用“Cover as -> JUnit”时它会失败。这是为什么?代码确实有问题。在代码中,我使用了一些遗留
这个问题在这里已经有了答案: How to test code dependent on environment variables using JUnit? (20 个答案) 关闭 8 年前。 我
当我们的临时服务器因每周维护而停机时,我们有许多集成测试失败。当临时服务器关闭时,我们会发送一个特定的响应,我可以在集成测试中检测到该响应。当我得到这个响应而不是测试失败时,我想知道是否可以跳过/忽略
我需要测试一个程序,它首先预处理一些数据,然后使用这些预处理过的数据计算几个不同的结果——为每个计算编写单独的测试是有意义的。 官方 JUnit 政策似乎是我应该在每次计算测试之前运行预处理。 我如何
JUnit 是否可以为每个测试方法添加描述文本,以便描述文本稍后出现在surefire/failsave xml 报告中!? 背景:我在受监管的环境中工作,必须编写大量文档、测试规范和测试报告。 JU
当 JUnit 中的断言失败时,我想做一些“自己的事情”。我想要这个: public class MyAssert extends org.junit.Assert { // @Overrid
关闭。这个问题是off-topic .它目前不接受答案。 想改善这个问题吗? Update the question所以它是 on-topic对于堆栈溢出。 8年前关闭。 Improve this q
我想将参数从运行配置传递给我的 JUnit 测试。我如何到达 JUnits 的主要方法来访问这些参数?有谁知道如何做到这一点? 谢谢 最佳答案 您可以使用 -D 系统属性运行单元测试,并使用 Syst
我是一名优秀的程序员,十分优秀!