0
unittesting을 시도하고 문제가 발생했습니다. 한 부분이 실패 할 경우 테스트의 나머지 부분을 중단하지 않는 방법에 관심이 있습니다. g_test_fail()을 사용하여이 작업을 시도했지만 테스트가 끝나면 segfault가 발생합니다. g_test_fail()을 주석 처리하면 테스트는 정상적인 프로그램 종료로 성공한 것으로보고됩니다.gtest_fail()을 사용하여 glib로 유닛 테스팅을 수행하면 segfault가 발생합니다.
gdb로 프로그램을 실행하면 테스트 기능이 예상대로 종료되고 결함이 glib 라이브러리의 어딘가에서 발생 함을 알 수 있습니다.
아이디어가 있으십니까? --keep-going
없이 정상적인 동작입니다
//
// Unit Test with GLib
//
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <glib.h>
typedef struct TestFixture_T {
unsigned int uiA;
unsigned int uiB;
char szString[16];
} TestFixture_T;
void TestFixtureContructor(TestFixture_T* pFixture, gconstpointer pg) {
pFixture->uiA = 1u;
pFixture->uiB = 2u;
strcpy(pFixture->szString, "Blank");
}
void TestFixtureDestructor(TestFixture_T* pFixture, gconstpointer pg) {
pFixture->uiA = 0u;
pFixture->uiB = 0u;
strcpy(pFixture->szString, "");
}
gboolean TestFixtureCompare(TestFixture_T* pFixtureA, TestFixture_T* pFixtureB) {
return pFixtureA->uiA == pFixtureB->uiA
&& pFixtureA->uiB == pFixtureB->uiB
&& strcmp(pFixtureA->szString, pFixtureB->szString) == 0;
}
void test_this(TestFixture_T* pFixtureInput, gconstpointer pg) {
TestFixture_T LocalFixture;
TestFixtureContructor(&LocalFixture, NULL);
if(!TestFixtureCompare(&LocalFixture, pFixtureInput)) {
g_test_fail(); // <-- This is the trouble spot. Comment this out and there is no segfault.
}
}
int main(int argc, char** argv) {
/* Initialize test framework */
g_test_init(&argc, &argv, NULL);
/* Add test */
TestFixture_T Fixture;
g_test_add("/MyFirstTest",
TestFixture_T,
&Fixture,
TestFixtureContructor,
test_this,
TestFixtureDestructor
);
g_test_add("/MySecondTest",
TestFixture_T,
&Fixture,
NULL,
test_this,
NULL
);
int result = g_test_run();
printf("...aaaaand scene!\n");
return result;
}
알고 유용하지만 실행하면 --keep-가는 프로그램을 실행할 때 세그먼트 폴트를 방지하지 않습니다. - 아뇨, 미안 해요. 그냥 다시 시도하기 전에 깨끗하게 만드는 것을 잊었습니다. – Kenneth