静的関数をテストする方法

テストハーネスがあります。悲惨な場合 - 静的関数をテストしようとするような場合、私は以下を使用します:

#include "code_under_test.c"
...test framework...

つまり、テスト対象の関数を含むファイル全体をテスト ハーネスに含めます。これは最後の手段ですが、うまくいきます。


関数を呼び出せない理由について詳しく教えてください。

.c ファイルにプライベートであるため、利用できませんか?その場合は、関数へのアクセスを許可する条件付きコンパイルを使用して、他のコンパイル ユニットが関数にアクセスできるようにすることをお勧めします。例えば

SomeHeaderSomewhere.h

#if UNIT_TEST
#define unit_static 
#else
#define unit_static static
#endif

ふふ

#if UNIT_TEST
void some_method
#endif

Foo.cpp

unit_static void some_method() ...

単体テストの場合、実際にはソース ファイル自体にテスト コードがあり、テスト時に条件付きでコンパイルします。これにより、ユニット テストはすべての関数とファイル レベルの変数 (静的またはその他) に完全にアクセスできるようになります。

ユニット テスト自体は静的ではありません。これにより、すべてのコンパイル ユニットをユニット テストする単一のスーパー テスト プログラムからユニット テストを呼び出すことができます。

コードを出荷する際、条件付きで単体テストをコンパイルしますが、これは実際には必要ありません (正確に出荷していることを確認したい場合)。 テストしたのと同じコード)。

コードが変更された場合にテストを更新する必要があることがより明確になるため、テストしているコードと同じ場所に単体テストを配置することは非常に重要であることが常にわかっています.