1

メインの機能の単体テストを作成する必要があります。

私は、C:\sample\src\main.c

#include<stdio.h>
void main()
{
printf("\nthis is main file");
}

void print()
{
printf("\nthis is print function of main file");
}

C:\sample\src\main.h

#ifndef MAIN_H
#define MAIN_H
void print();
#endif

C:\sample\unitTest.c

#include<stdio.h>
#include<main.h>
void main()
{
printf("unit test");
print();
}

上記のプログラムでは、UnitTest.c ファイルから単体テストをトリガーしたいと考えています。実行可能ファイルに 2 つのメイン ファイルを含めることはできません。これどうやってするの?

4

4 に答える 4

4

「正しい」答えは、main()print()を同じソース ( .c) ファイルに入れないことです。コードのモジュール性の観点から、メインと同じソース ファイルにある必要があるのは、それ自体ではあまり意味のないメインのヘルパー関数だけです。つまり、これらは「ユニット」ではないため、あなたは本当にそれらを単体テストしたくないでしょう。(これは、たとえば、コマンド ライン引数を解析する関数や、ヘルプ ステートメントを出力する関数のようなものです。)print()が「ユニット」(またはユニットへのエントリ ポイント) である場合、同じソース ファイルにあるべきではありません。その単位の一部ではないもの ( などmain()) として。

C はオブジェクト指向ではないため、論理的に接続されたものをグループ化するための自然な方法は提供されません。したがって、各ソース ファイルが「論理的なもの」を表すように、物事をソース ファイルに論理的にグループ化することがますます重要になります (「論理的なもの」の定義について)。

于 2013-07-09T04:48:35.337 に答える
1

プログラムに 2 つの主要な関数を含めることはできません。高い結束力を重視して、モジュラー プログラミングを検討する必要があります。

述べる:

オペレーティング システムは main 関数を呼び出します。それはあなたのプログラムの始まりです。あなたのプログラムに 2 つの開始点があるはずはありません。2 つある場合、コンパイラはオブジェクト ファイルをそれぞれリンクできません。

于 2013-07-09T04:06:59.380 に答える
0

Main はシステムによって呼び出されます。unitest プログラムを「システム」として先頭に追加する必要があるかもしれません。1. main.c と unitTest.c を独立したプログラムとしてコンパイルします (独自の main を使用)。:)

于 2013-07-09T04:31:11.440 に答える