1

単体テストを学んでいます。Eclipse と CppUTEST で簡単にプログラムをコンパイルできます。できます。ただし、ヘッダーファイルをオーバーライド/スタブする方法を理解するのに問題があります。テストシナリオを思いついたのですが、

私のファイル:

/src:
---------- src.c src.h //native compilator, for example stm-gcc
/test:
---------- AllTests.cpp Test_src.cpp //test compilator, for example gcc
/mocks:
---------- fsrc.h fsrc.c //fake file, should override src.h 

理論的には、ファイル "src.h" には、ネイティブ コンパイラ (stm-gcc) の設定が格納されます。私のテスト コンパイラ (gcc) はこれらの依存関係を使用できないため、このヘッダー ファイルをオーバーライド/スタブする必要があります。そのため、/mocks/fsrc.h ファイルを作成します。fsrc.h は src.h ファイルをオーバーライド/スタブする必要があります。

サンプル ファイル コード:

すべてのテスト:

#include "CppUTest/CommandLineTestRunner.h"
#include "CppUTestExt/MockSupport.h"

#include <src/src.h> // -> should read the "fsrc" file instead "src"

int main(int ac, char** av) { return CommandLineTestRunner::RunAllTests(ac, av); }

Test_src.cpp

#include "CppUTest/TestHarness.h"
#include <src.h>

class ClassName { int a; };

TEST_GROUP(ClassName)
{
  ClassName* className;

  void setup() { className = new ClassName(); }
  void teardown() { delete className; }
};

TEST(ClassName, Create)
{
  CHECK(0 != className);
  STRCMP_EQUAL(myString, "my_string_from_mock_header"); // --> myString macro should be read from "mocks/fsrc" not from "src/src.h"   
}

モック/fsrc.h

#ifndef SRC_SRC_H_
#define SRC_SRC_H_

#define myString "mocks/Header"
int fun();

#endif /* SRC_SRC_H_ */

モック/fsrc.c

#include "fsrc.h"    
int fun() { return 999; }

src/src.h

#ifndef SRC_SRC_H_
#define SRC_SRC_H_

#define myString "src/Header"
int fun();

#endif /* SRC_SRC_H_ */

src/src.c

#include "src.h"  
int fun() { return 1; }

日食エラー:

'g++ -I"C:\cygwin64\home\karb\cpputest\include" -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"AllTests.d" -MT"AllTests.o" -o "AllTests.o" "../AllTests.cpp" ../AllTests.cpp:5:10: 致命的なエラー: src/src.h: そのようなファイルまたはディレクトリはありません'

私が変更するとき:

include <src/src.h> to include "src/src.h"

コンパイルは機能しますが、ヘッダー ファイルの上書きは機能しません。メインヘッダーファイルを上書きできないというのは、何が間違っていますか?

4

0 に答える 0