2016-06-14 18 views
1

私は昨日から単体テストについて学んだばかりで、今日は特にMockとNSubについて読んでいました。 私が持っている問題は、その背後にある哲学と考え方が得られないということです。だから、私の本を読んで、たとえばこれに来た:単体テスト用モックを作成するときに私たちは横たわっています

[Test] 
public void Returns_ByDefault_WorksForHardCodedArgument() 
{ 
IFileNameRules fakeRules = Substitute.For<IFileNameRules>(); 

fakeRules.IsValidLogFileName(Arg.Any<String>()) 
.Returns(true); 

Assert.IsTrue(fakeRules.IsValidLogFileName("anything.txt")); 

} 

OKので、最初私たちはいくつかの実際の作業を行い、その中に実際のメソッドを持っている実際のクラスのインタフェースを表すために、偽のオブジェクトを作ります。次に、そのメソッドを呼び出しますが、trueを返すようにも指示します。 それからそれが真実に戻っているかどうかを確認するためにそれを主張しますか?まあ、それが真実を返す前に、私たちはそれを1行だけ言いました!今我々はそれが真実に戻ってテストします!彼らは私達が大丈夫と言って良かった? 私はそれを得ることはありません!私にこのように感じる:先生は質問に答えると答えをイエスに伝えるために子供に話す。そして質問に答えて、子供がはいと答え、試験に合格したと尋ねる。

+1

テストするクラスを模擬したり、スタブしたりしないでください。その依存関係のみ。 –

+0

@YacoubMassadロイのユニットテストの本ですので、この愚かな言葉を使って構文を教えてくれましたか? – Bohn

+0

これは本の例ですか?そのまま? –

答えて

2

この質問のコメントによれば、このテストは模擬ライブラリがどのように動作するかを示している可能性があります。私たちのテストコードでは、私たちがテストしたいクラスを模擬することは非常に困難です(潜在的な例外である)。代わりに、コードが使用するいくつかのことを模擬して、より決定論的なテストや、より速いテストや、まれなイベントなどをシミュレートするテストを模擬したいかもしれません。

あなたの直接の質問には、私たちがテストのために依存関係を模倣するときには、自分自身に。私たちは、 "依存関係がXを行い、次にコードがYを行うかどうかを確認しましょう"と言っています。これで、依存関係が決して実際に "X"になることはありません。私にとって、嘲笑の目的はこのフィクションから始まり、次に依存関係をテストし、フィクションが現実にマッチする点まで実際に "X"を行うことを確認することです。

1

テストの目的は、メソッドが動作する可能性があるあらゆる方法をチェックすることです。メソッドに真のステートメントを伝え、falseを返した場合。明らかに、あなたが書いた方法で何かが間違っています。時には、最も複雑な問題は、コードで簡単な間違いを見つけることで解決できます。 (この場合、trueを返すように要求されたときにメソッドが実際にtrueを返すかどうかを調べるためにチェックします)。あなたはうんざりしました。

+0

acutalメソッドはどのようにテストしていますか?それはfakeRules.IsValidLogFileNameと言っています...そしてその上の行は、常に真を返すように言ったのです! – Bohn

+1

特定のケースでは、OPが投稿されました、それは、テストされている唯一の模擬フレームワークです - 私はテストや開発者に新しい人と何度も繰り返し見てきたパターンです。そうです。 – stuartd

関連する問題