1

私は C# の経験が豊富で、現在、Knockout.js と JavaScript を使用して ASP.NET MVC を学習しています。私は非常にTDDに基づいた人間であり、苦労しているように見える多くの障害にぶつかりました. 私は jsTestDriver の多くの例を読みましたが、テストするまではすべてかなり簡単に思えます...

基本的に、(JsTestDriver と組み合わせて JetBrains WebStorm 5.0.4 を使用して) 単体テストしようとしているのは、特定のケースが満たされたときに例外がスローされるという単純なアサーションです。これは単純なはずですよね?

私の実際のテストケースは、jsTestDriver で次のようになります (基礎となる基本的なコードをすべて削除し、単体テスト関数自体で例外を発生させただけです)。

GridControllerTest.prototype.testBasicExceptionType = function () {

assertException(function() {
    throw "InvalidDataSourceException";
}, "InvalidDataSourceException");

};

私の関数が例外「InvalidDataSourceException」をスローすることを主張するテストケースはどれですか? 最初に、型を宣言した関数でこれを試しました:

function InvalidDataSourceException (){}

GridControllerTest.prototype.testBasicExceptionType = function () {

assertException(function() {
    throw new InvalidDataSourceException();
}, "InvalidDataSourceException");

};

誰かが私に盲目的に明白なことを指摘して、なぜそのような単純なテストに合格できないのか教えてもらえますか? 単体テスト関数の構造を誤解していますか?

4

1 に答える 1

1

違いは、最初の例では文字列をスローし、2 番目の例ではオブジェクトをスローしていることです。JavaScript のオブジェクトには、基本的に型システム (プロトタイプのみ) がないため、関連付けられた正規名がありません。2 番目の例では、関数が window.InvalidDataSourceException に割り当てられていますが、関数オブジェクト自体には名前がありません。特に、名前を取得するためのデフォルトのリフレクションや、正規値を取得するための toString() と同等のものはありません。

個人的には、この種の理由で不安定すぎるため、assertException の使用を完全にやめました。try-catch ブロックを使い始めました。それまでにスローされることが予想されるため、try ブロックの最後に fail() の呼び出しを配置し​​、catch ブロックに別のテスト ポイントを配置して、例外が期待どおりであることを確認しました。私の意見では、これはより良いテスト パターンです。なぜなら、それは、コントロールが変更されたという理由でテストからコントロールの変更のテストを分離するからです。

于 2012-11-05T20:39:48.767 に答える