【发布时间】:2016-02-27 21:29:20
【问题描述】:
我有一个 C 程序,它可以提供质数到输入数。我想测试这个程序,看看它是否给出了合数。现在我需要实施测试,我觉得这很困难。因此,如果有人可以帮助我,我将不胜感激。
这是我的 Checkprime.c:
#include "defs.h"
#include "externs.h"
#include "minunit.h"
int CheckPrime(int K){
int J;
for (J=2; J*J <= K; J++){
if (Prime[J] == 1){
if (K % J == 0) {
Prime[K] = 0;
return 0;
}
}
}
Prime[K] = 1;
return 1;
}
这是我的 main.c
#include <stdio.h>
#include "defs.h"
#include "checkprime.c"
int Prime[MaxPrimes];
int main()
{
int UpperBound;
int N;
int *ba = &UpperBound;
printf("enter upper bound\n");
scanf("%d",ba);
Prime[2] = 1;
for (N = 3; N <= *ba; N+= 2){
CheckPrime(N);
if (Prime[N]== 1) printf("%d is a prime\n",N);
}
}
这是我的 minunit.c(测试,已实现):
#undef NDEBUG
#ifndef _minunit_h
#define _minunit_h
#include <stdio.h>
#include <stdlib.h>
#define mu_suite_start() char *message = NULL
#define mu_assert(test, message) if (!(test)) { return message; }
#define mu_run_test(test) \
message = test(); tests_run++; if (message) return message;
#define RUN_TESTS(name) int main(int argc, char *argv[]) {\
argc = 1; \
printf("----\nRUNNING: %s\n", argv[0]);\
char *result = name();\
if (result != 0) {\
printf("FAILED: %s\n", result);\
}\
else {\
printf("ALL TESTS PASSED\n");\
}\
printf("Tests run: %d\n", tests_run);\
exit(result != 0);\
}
int tests_run;
#endif
我在互联网上找到了 minunit.c,但我不知道如何实现我想要的测试,并让它工作。我的目标是为我的程序做一个简单的测试。
【问题讨论】:
-
没有什么能阻止
Prime[J]访问过去的Prime[MaxPrimes] -
这会阻止我进行单元测试吗?
-
不检查
J范围并不妨碍进行单元测试。它会阻止单元测试正常工作。运行代码并输入2147483647或-2147483648并查看单元测试检测到任何问题。 -
嗯,好的,我会改变它,并将限制设置为 100 :) 但是单元测试呢?
标签: c unit-testing