2009-06-23 4 views

答えて

3

テストクラスをデプロイ可能な成果物に含めることは望ましくないので、それらを別々にしておきます。 .exeのサイズを増やしたり、クライアントに利用可能にする意味はありません。

CppUnitでユニットテストを書くことをおすすめします。

1

私はそれがベストプラクティスではないと言いますが、あなたのプログラムを壊したりクラッシュさせないという点で「大丈夫」です。大丈夫ですが、やってはいけないことはたくさんあります。

0

これは悪い習慣です。

作成するクラスをテストするには、別のクラスが必要です。あなたがやっているやり方は、テストコードでプロダクションコードを膨らませることです。これはあなたがすべきことではありません。

あなたはFooのは、このようなものですクラステストする方法:

//Foo.cpp 
class Foo { 
    public: 
    int GetInt() { return 15; } 
}; 

//FooTest.cpp 
TEST(FooTest, testGetIntShouldReturn15) { 
    Foo foo; 
    ASSERT_EQUAL(15, foo.GetInt()); 
} 
1

テストコードは、ように、生産の所有権の観点からコード、展開、非機能要件とは根本的に異なっています。したがって、テストするコードとは別のファイル、おそらくは別々のディレクトリに置いておく方がよいでしょう。

テスト対象クラスのホワイトボックス単位テストを容易にするために、テストクラス/テスト関数をフレンドとして宣言する必要があることがよくあります。一部のクラスはパブリックメンバーとの単体テストしかできないため、友人を追加することは必ずしも必要ではありません。

テストコードとテスト対象コードを結合するのは簡単です。同じプロジェクト内でオブジェクトファイルをリンクするだけです。

#includeのコードがユニットテストコードで表示されることがありますが、それに対してアドバイスをします。たとえば、テストカバレッジ測定ツールを使用している場合(推奨)、対策は正しくありませんテスト中のコードの場合

+0

"テスト対象のコードを#includeしたユニットテストコードが表示されることがありますが、それに対して助言します。" ユニットテストでどのようにクラスを使用しますか? –

+0

@Edison:同じコンパイル単位で定義された他のクラスを使用するのと同じです。ある意味では、テスト対象のクラスとテストクラスは同じソースファイル内にありますが、別のクラスとして持つようなものです。 – laalto

+0

私はそれらを別々のクラスとして持っていることに同意しますが、Foo.cppが異なるファイルにあるのでFoo.cppでどのようにテストするのか分かりません。だから私の 'FooTest.cpp'では、Fooをテストするために "Foo.h"を#includeする必要があります –

1

クラス内にテストケースがある場合は、フィクスチャーのようなものを持つのは難しいです。

また、Boost.Testに叫んでお伝えします。学習曲線はやや高いですが、それに慣れれば驚くべきことです。