我是C的新手,我遇到了以下问题:我制作了一个非常小的程序filecopy.c,我想用Check进行单元测试,但是当我进行单元测试时构建它我得到了大量未定义的引用错误,就好像Eclipse无法找到库libcheck(我通过将'check'添加到项目中来指定 - 属性 - C ++构建 - 设置 - 库)。
以下是我文件中的相关代码:
filecopy.c
#include <stdio.h>
int fileCopy()
{
int c;
while ((c = getchar()) != EOF) {
putchar(c);
}
return 0;
}
filecopy.h
int fileCopy();
filecopyTest.c
#include <stdio.h>
#include <stdlib.h>
#include <check.h>
#include "filecopy.h"
START_TEST (test_fileCopy)
{
int i;
for (i = 0; i < 10; ++i) {
putchar(i);
}
fileCopy();
//Fail if the last char put by fileCopy is not 9
fail_unless(getchar()==9);
}
END_TEST
Suite *
fileCopy_suite (void)
{
Suite *s = suite_create ("fileCopy");
/* Core test case */
TCase *tc_core = tcase_create ("Core");
tcase_add_test (tc_core, test_fileCopy);
suite_add_tcase (s, tc_core);
return s;
}
int
main (void)
{
int number_failed;
Suite *s = fileCopy_suite ();
SRunner *sr = srunner_create (s);
srunner_run_all (sr, CK_NORMAL);
number_failed = srunner_ntests_failed (sr);
srunner_free (sr);
return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
}
测试代码与check tutorial完全一致,而filecopy程序自行运行。这是Eclipse使用此设置生成的Makefile:
################################################################################
# Automatically-generated file. Do not edit!
################################################################################
-include ../makefile.init
RM := rm -rf
# All of the sources participating in the build are defined here
-include sources.mk
-include subdir.mk
-include objects.mk
ifneq ($(MAKECMDGOALS),clean)
ifneq ($(strip $(C_DEPS)),)
-include $(C_DEPS)
endif
endif
-include ../makefile.defs
# Add inputs and outputs from these tool invocations to the build variables
# All Target
all: Homework1
# Tool invocations
Homework1: $(OBJS) $(USER_OBJS)
@echo 'Building target: $@'
@echo 'Invoking: GCC C Linker'
gcc -o "Homework1" $(OBJS) $(USER_OBJS) $(LIBS)
@echo 'Finished building target: $@'
@echo ' '
# Other Targets
clean:
-$(RM) $(OBJS)$(C_DEPS)$(EXECUTABLES) Homework1
-@echo ' '
.PHONY: all clean dependents
.SECONDARY:
-include ../makefile.targets
我告诉Eclipse构建filecopy.c文件,然后构建filecopyTest.c文件,它为filecopyTest.c中调用的每个函数提供了一个'[function_name]'的未定义引用(包括fileCopy,它使得没有意义,因为它包含该函数的标题,甚至不必导入库)。库文件实际上存在于/ usr / lib中并且安装正确(当手动运行gcc时,它编译得很好并且似乎运行(虽然可能有一些错误;但很难说)。
如果您有使用Eclipse内部C进行单元测试的经验,请提供帮助。我非常喜欢Eclipse,并希望将它用于我的新C项目,但我也喜欢测试优先编程,并且不打算在没有测试的情况下为C开发项目。我有与CUnit完全相同的问题,并认为也许Check会更好用,但显然我做错了,因为我不明白完整的C菜鸟。我已经浏览过互联网并在类似的情况下发现了多篇“已解决”的文章,但实施他们的解决方案对我没有帮助。我不明白Eclipse对make文件做了什么,甚至不知道链接是什么以及它如何失败,但我只是想在Eclipse中使用单元测试对C进行编程,并且在数小时后尝试解决这个问题,它看起来像是一个不可逾越的任务。如果您需要更多信息,请告诉我们;我正在使用Eclipse Indigo作为参考,它使用CDT 8.0.2。
提前感谢任何人可能给我的任何帮助。了解单元测试及其有用之处令人沮丧,然后了解C及其性能如何,然后了解我不能将这两者放在我最喜欢的IDE中。