2009-08-23 2 views
1

私は、初期化時に到達可能なディレクトリにライセンスを必要とする所有者.DLLからオブジェクトを作成するC#で次のクラスを持っています。システムパスが間違っている場合にだけスローされる例外をテストするにはどうすればよいですか?

public CplexServices{ 
    private Cplex _cplex; 
    public Cplex Cplex { get { return _cplex; } } 
    public CplexServices() 
    { 
     try 
     { 
      _cplex = new Cplex(); 
     } 
     catch 
     { 
      throw new Exception("Path or license file is wrong"); 
     } 
    } 
} 

「新CPLEX()の」Windowsシステムパスが間違っているか、ライセンス・ファイルが正しくない場合は失敗する可能性があります。パスやライセンスファイルが間違っているときに正しい例外がスローされた場合にアサートするテストを書いてみたい。

パスまたはライセンスファイルを変更せずにこのテストを作成するにはどうすればよいですか?

答えて

1

あなたは何をテストしていますか?私は、新しいCplex()への呼び出しのエラー処理パスが正しいことをテストしていると思います。

public CplexServices() 
{ 
    try 
    { 
     _cplex = new Cplex(); 
    } 
    catch 
    { 
     throw new Exception("Path or license file is wrong"); 
    } 
} 

それはあなたが正しいことを行う例外をスローし場合は、ライセンスファイルがかなり不足しているとき、それは例外をスローし、あなたがそのをテストしていること、新しいCPLEX()自体はTestNGのされていません。この場合、私はおそらくそれほど気にしませんが、それはとても自明です。しかし、これがやや複雑な場合、例えば、重大な回復処理を行う場合、これをテストすることができます。

アプローチは工場で行われます。あなたのテストで今

public CplexServices(CplexFactory myFactory) 
{ 
    try 
    { 
     _cplex = myFactory.makeCplex(); 
    } 
    catch 
    { 
     throw new Exception("Path or license file is wrong"); 
    } 
} 

あなたはarticficiallyテストしたいパスをトリガーする例外を投げることができる工場を渡すことができます。

これは、Cplex()コンストラクタ自体をどのようにテストするかという疑問を残しています。おそらく、これはあなたの問題ではない、著者は独自の単体テストを持つべきである。

+0

新しいCplex()が正しく動作するかどうかはテストしていません。path/licenseが間違っているときに正しい例外がスローされたかどうかをテストしたいだけです。私たちのジョブサーバー上で「新しいCplex」が失敗すると、エラーメッセージが表示されずに失敗します。私はちょうど次回のパスが間違っているように、例外コードをスローするように追加しました。悪いパスやライセンスファイルが原因で失敗していることを見つけるのに1時間かかりません。次に、正しい例外がスローされていることをテストする方法があるかどうかを考え始めました。それから、皆さんは良いアイデアを持って来ました。ありがとう... – derdo

1

できません。ファイルの場所を誤って設定し、例外が発生することを確認する必要があります。

しかし、おそらくこれはあなたが単体テストでテストするものではありません。なぜなら、失敗を判断するコードはあなた次第ではないからです。

このファイルの場所を設定するとしますか?次に、その場所が正しいことをテストするだけです。複数のデプロイメントと異なる設定がある場合は、適切な環境に対してテストを実行する必要があることを考慮してください。

1

あなたは悪いパスに入れ経路問題を、テストするには

string oldPath = Environment.GetEnvironmentVariable("PATH"); 
Environment.SetEnvironmentVariable("PATH", "MyBadPath"); 
// Do tests 
Environment.SetEnvironmentVariable("PATH", oldPath); 

を使用することができます。ライセンスファイルをテストするには、不正なライセンスファイルを保持するテストディレクトリへのパスを入力します。

関連する問題