2017-08-08 5 views
0

私はゴーに一般的に、たとえば、テストケースを実装するためにTableDrivenTestsと呼ばれるものを使用していることを知っている:C++でTableDrivenTestsの概念を使用できますか?

func TestMyFunc(t *testing.T) { 
    var tTable = []struct { 
     input []float64 
     result float64 
    }{ 
     {[]float64{1, 2, 3, 4, 5, 6, 7, 8, 9}, 102.896}, 
     {[]float64{1, 1, 1, 1, 1, 1, 1, 1, 1}, 576.0}, 
     {[]float64{9, 9, 9, 9, 9, 9, 9, 9, 9}, 0.0}, 
    } 

    for _, pair := range tTable { 
     result := MyFunc(pair.input) 
     assert.Equal(t, pair.result, result) 
    } 
} 

のテストケーステーブルを考えると、実際の試験単に反復し すべてのテーブルを介して各エントリについて、必要なテストを実行します。

私は本当にこのようです。goテストを実装するスタイル。だから知りたいのですが、それに似た何かを使用することは可能でしょうかC++?可能であれば、私に例を教えてもらえますか?

編集:私はのQt Creatorをを使用していると私は、ユニットテストを実行するために作成したクラスを持っています。私が実際に知りたいのは、入力出力の構造体を作成し、各テストを実行するためのエントリを繰り返し実行できるかどうかです。私はQtを使用しているので、標準のC++構造体である必要はありません。Qtによって提供される別のデータ構造にすることもできます。 C++の1翻訳:ここ

+0

標準テストC++を使用していないのは、単体テストがないからです。あなたはそのためのライブラリを見つける必要があります。 – Rakete1111

+0

ありがとう@ Rakete1111。私は私の質問を編集しました。 – KelvinS

+0

もちろん可能です。それを試してみてください。 –

答えて

2

は、ほぼ1である

#include <vector> 
#include <iostream> 

// Testable function. 
double MyFunc(const std::vector<double> &input) 
{ 
    static double results[] = { 102.896, 576.0, 0.0 }; 
    static int i = 0; 
    return results[i++]; // return different results 
} 

// Our test. Returns true if passes. 
bool TestMyFunc() 
{ 
    struct 
    { 
     std::vector<double> input; 
     double result; 
    } tTable[] = 
    { 
     {{1, 2, 3, 4, 5, 6, 7, 8, 9}, 102.896}, 
     {{1, 1, 1, 1, 1, 1, 1, 1, 1}, 576.0}, 
     {{9, 9, 9, 9, 9, 9, 9, 9, 9}, 0.0}, 
    }; 

    for (const auto &pair : tTable) { 
     auto result = MyFunc(pair.input); 
     if (result != pair.result) 
      return false; // return false if test fails 
    } 

    return true; // all test cases passed 
} 

int main() { 
    std::cout << TestMyFunc() << std::endl; 
    return 0; 
} 

しかし、私は、例えば、既存のユニットテストフレームワークを使用することをお勧めしますgtestの概念はvalue parametrised testsです。これはおおよそのものです。

+0

9分で忍者されています.... :) ...あなたのものはより完全で、もう少し洗練されています。少なくとも私はほとんど同じ 'tTable'構造体に行きました(最初は結果が最初にあり、ユニットテストではもっと慣用的ですが、"期待値 "は通常左側にあり、入力と計算は右側にあります)。今私はOPがそれのようにそれを整理したのを見るので、.... OPのためのちょっと無意味な提案。 – Ped7g

関連する問題