Eclipse C单元测试,检查未定义的引用错误

时间:2012-09-05 23:35:25

标签: c eclipse unit-testing linker-errors check-framework

我是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中。

0 个答案:

没有答案