2017-07-09 21 views
1

私の知る限り、ユニットテストは公開APIごとに個別に行う必要があります。単体テスト:単体テストのメソッドを別の方法で使用しているのですか?

class MyStorage { 
private: 
    std::vector<int> int_vec_; 

public: 
    bool insert_int(int value); 
    int get_value_at(int idx); 
} 

私はGooogleTestフレームワークを使用して、次のようにユニットテストを書いた:しかし、私は、次の例に示す独立して、各APIのユニットテストへの明確な方法を発見していないしている状況で経験されています:

int int_tenth(int x) { return x * 10; } 

TEST_F(MyStorageTest, insert_int) { 
    for(int i = 0; i < 10; i++) { 
     int value = int_tenth(i); 
     bool ret = my_storage.insert_int(value); 
     ASSERT_TRUE(ret); 
    } 
} 

TEST_F(MyStorageTest, get_value_at) { 
    for(int i = 0; i < 10; i++) { 
     int value = int_tenth(i); 
     my_storage.insert_int(value); 
    } 

    for(int i = 0; i < 10; i++) { 
     int expected_value = int_tenth(i); 
     int value = my_storage.get_value_at(i); 
     ASSERT_EQ(expected_value, value); 
    } 
} 

私は正しくやっていますか?そうでない場合は、この例の単体テストをどうすればできますか?

答えて

1

これは「大丈夫」と思われます。あなたのテストケースは両方のAPIを実行しています - そして、あなたはgetメソッドをテストするためにinsertメソッドを使う必要があります。

欠けているもの:コーナーケース、特にgetの場合。次のように:負のindixのテストケースを持つ。または無効なインデックス。そのようなテストでは、特定のエラーが発生するはずです。予想されるエラー(例外など)が表示されていることを確認したい場合があります。

QickCheckのアイデア(テストフレームワークでランダムなテストを実行して、製造コードに指定するのプロパティーの違反を検出するライブラリ)を調べたい場合があります。

+0

はい。手伝ってくれてありがとう。否定的なテストに関して私はすでにそれを考慮した。私の現在の懸念は、単体テストを行う際にいくつかのAPIを呼び出すことです。 Upvoted :) –

+0

ここに私の感謝を示す;他の場所でそれをやっている;-) – GhostCat

関連する問題