2016-07-08 13 views
1

AFAIKのbasic document of gtestは、引数を持つ関数の例を示しています。引数を持たない計算にgtestを使用するにはどうすればよいですか?

いくつかの信号のスロットである機能をテストする必要があります。そのうちの1つにパラメータがありません。内部的には、ソケットデータをフェッチし、ローカル変数を使用して解析し、クラスメンバーに値を割り当てます。

gtestを通してこのようなことをテストする方法はありますか?

答えて

2

2つの機能に分けてください。 1つは引数を取るコアで、もう1つはソケットデータをフェッチしてコアに渡すラッパーです。例:

result compute_core(data x); 
result compute_wrapper(){ 
    auto x=read_from_socket(); 
    return compute_core(x); 
} 

これで、compute_coreを自由にテストできます。

+1

論理的にテストされたコードの第一歩です。ソケットから読み取るプロセスは、単独でテストできることに注意してください。 +1 –

+0

元のコードを修正する必要があるということですか? –

+0

@TheIndependentAquariusはい、あなたは –

2

質問は既によく答えられましたが、いくつかの物語を加える価値があるかもしれません。

「引数のない関数」という考え方は、実際には擬似語法です。

関数に引数がない場合は、実際には定数、プロセス、または操作なしのいずれかです。

観察可能な副作用を生成せずに値を返した場合、それは定数であり、戻り値が何であるべきかはすでに分かっています。戻り値はASSERT_EQです。

副作用(ソケットからの消費、ストリームへのデータの送信、データベースへのデータの格納、フレームワークなど)がある場合、プロセスです。

プロセスの場合は、単体でユニットテストすることはできません。プロセスには(多分)多くの入力と出力があります。後者に対する前者の効果は、あなたがテストしていることです。

た場合、テストは次のようになります。

{ 
    set_up_process_dependencies(); 
    inject_known_data_into_the_process_possibly_via_dependencies(); 
    call_process(); 
    ASSERT_EQ(x, test_some_output_of_the_process()); 
    ... 
} 

は、より多くのユニットテストよりも統合テストのように見えるし始めます。

+0

に役立つ回答を書いてくれてありがとうございます。 –

関連する問題