2011-07-28 6 views
1

私はC#/ NUnitで開発されたユニットテストを実行するためにReSharperを使用しています。 C++/CLIクラスを単体テストすると、すべてのテストは合格しますが、次のメッセージボックスがポップアップします。 "タスクランナーアプリケーションが動作を停止しました"。なぜ私のResharper NUnitセッションは動作を停止しますが、デバッグモードで動作します

すべてのテストが成功し
public ref class MyClass 
    {  
    public: 
     MyClass(  
     array<double>^ rawPrices, 
     array<DateTime>^ priceDates) 
    { 
// some unmanaged C++ code runs here 
} 
(snip) 
    ~MyClass() 
    { 
    } 

    private: 
     int numDays; 
     array<double>^ Prices; 
     array<double>^ Discounts; 
    }; 

は、メッセージがポップアップ表示さ:私がテストしていたクラスは、アンマネージ何も持っていません。 しかし、ユニットテストのデバッグに切り替えると、テストは成功します。 私がテストしているライブラリは、リリースx64モードでコンパイルされています。

この特殊な動作は、MyClassに何か問題があることを示していますか?

答えて

9

この特殊な動作の理由は次のとおりです。再帰的メソッドが無限ループで呼び出されました。

1

これはおそらくあなたの答えではありませんが、参考になるかもしれません。もちろん

System.Diagnostics.Debugger.Break(); 

デバッガでテストを実行するとき、あなたはこのことを気付くだろう:あなたはどこかに自分のコードに次のように置く場合は、この同じダイアログボックスを取得することができます!それでも、あなたのコードと同じようなものがあるかもしれません。 Break()ステートメントはアンマネージコードを呼び出させ、デバッガがアタッチされていない場合、Resharperが未処理のWin32例外を引き起こす可能性があります。

関連する問題