2016-11-27 3 views
0

私は理論について多くの理論を見てきましたが、真実は誰も理論を常に使わない理由を説明するのに十分ではないということです。なぜ理論が使われているのではないのでしょうか?NUnit理論はテストを置き換えますか?

面白いことに、そこにあるすべての例では、テストをテストまたは理論のいずれかに簡単にセットアップでき、私はここで何かが欠けていると確信していますが、私は自分を哲学どのタイプの属性を使用すべきかについての不確実性。

違いは、自己文書化されたコードのためだけだとしましょう。それでは、なぜDatapointとDatapointSourceを理論とTestのために使うのですか?

実際には、違いが本当にどこにあるかを問わず、誰も簡単できれいな回答で来ていないと感じています。理論が絶対に意味をなさない少なくとも1つの例、そしてテストはうまく合っている、または他の方法で...

プログラマとして私は.....答えが単純でないならば、そこに何か間違っている。私が何が欠けているか見るのを助けてください。

答えて

1

あなたはNUnitを指しているので、私はNUnitが理論によって意味するものをWRTに答えます。これは、xUnit.Netがこの用語をどのように使用するかとはまったく異なります。

私はJUnitから、特にDavid Saffの仕事からの理論を得ました。ここには件名に関する記事が1つあります:http://groups.csail.mit.edu/pag/pubs/test-theory-demo-oopsla2007.pdf Googleの "saff theory"ともっと詳しく見ていきます。

基本的にテストを作成するときに、テストされたコードがどのように機能するかについての理論があることがあります。 (この答えでは、小文字の理論は英単語ですが、理論はNUnitのことです)これは数学的な推論で特に一般的です。たとえば、平方根を計算するプログラムを考えてみましょう。私は、負でない数字の平方根は、それ自身で乗算されたときに元の数を与えるような値であると理論化することができます。これは計算に関する完全に自己完結した声明です。 NUnitのを使用して

、私はこのようなテストを書くことができ...

public void SqrtTest(double value) 
{ 
    Assume.That(value >=0); 
    double answer = SquareRootOf(value); 
    Assert.That(answer*answer, Is.EqualTo(value)); 
} 

このテストは関係なく、我々はそれを与えるどのような数働きません。数値が負の場合、結果は確定的ではなく、結果全体には影響しません。正の場合は、実際のアサーションが実行され、テストは成功または失敗のいずれかになります。

理想的な世界では、提供される値はどこから来てもかまいません。 JUnitでは、彼らはデータポイントから来て、私はそれをコピーしました。主に暫定的な解決策としてプログラマ指定することも許可しました。最終的には、プログラマーやテスターの介入なしに、テストフレームワークがTheoryのためのデータを生成するさまざまな方法をサポートするというアイデアがありました。

残念ながら、私たちはまだ最後のビットを待っています。 :-)

ボトムライン、理論を持っているときに理論を使うべきだと思います。ロジックを一切持たないサンプルがある場合は、テストを使用してください。ほとんどのビジネスアプリケーションで起こるIMEです。

最近、私は理論に関するかなり長い章を書くことを望んでいます。

+0

あなたの答えは非常に説得力があります。それでも私はいくつかの質問があります(私はもっと学びたいからです)が、私は一般的な考えを持っていると思います。さて、私の質問:データポイントを通して理論への入力を制限できるのであれば、理論をテストに変換していないのでしょうか? –

+0

はい、理論上です。 :-) – Charlie

+0

ある意味では、データポイントを選択することで、アプローチは「純粋」になりませんが、実際には、理論ではそれぞれの引数についてデータポイントが使用されるため、見えなかった問題が発生します。もちろん、ランダムなパラメータを使用してさらに多くのデータポイントを作成することもできます。 – Charlie

関連する問題