nunitとninjectを使用するVS2012の新しいMVC4ソリューションでncrunchを実行しています。
私が最初にソリューションを開いたとき、50ほどすべてのテストが実行され、正常に合格しました。
コードを変更した後(空のスペースを追加しただけでも)、ncrunchはほとんどの単体テストが失敗したことを報告します。ncrunchウィンドウで「すべてのテストを実行」を押しても同じことが起こります。
ただし、[ここに表示されているすべてのテストを実行する]ボタンを押すと、50個すべてのテストに再度合格し、ncrunchはすべてが正常であると報告します。
また、各テストを個別に実行すると、毎回合格します。
それらが失敗するとき、それらは私のninjectセットアップコードで失敗しているようです
エラー:ControllerTestSetupでTestFixtureSetUpが失敗しました
public class ControllerTestSetup
{
[SetUp]
public void InitIntegrationTest()
{
var context = IntegrationTestContext.Instance;
context.Init();
context.NinjectKernel.Load<MediGapWebTestModule>();
}
[TearDown]
public void DisposeIntegrationTest()
{
IntegrationTestContext.Instance.Dispose();
}
}
public class IntegrationTestContext : IDisposable
{
private static IntegrationTestContext _instance = null;
private static readonly object _monitor = new object();
private IntegrationTestContext() { }
public static IntegrationTestContext Instance
{
get
{
if (_instance == null)
{
lock (_monitor)
{
if (_instance == null)
{
_instance = new IntegrationTestContext();
}
}
}
return _instance;
}
}
}
すべてのテストは、毎回問題なくresharperテストランナーで実行されます。
誰かがこれを引き起こしている可能性があることを知っていますか?
Instanceプロパティ内のシングルトンロックコードと関係があると思いますが、よくわかりません。
================================================== ============================進捗状況:
これをtrycatchステートメントでラップし、出力ウィンドウにエラーを書き込むことで、上記のninjectsetupメソッドのエラーまで追跡することができました。
例外は、モジュールを複数回ロードしようとしたことが原因でした。たとえ私が絶対にロードしておらず、どのタイプの自動モジュールロードも使用していない場合でもです。
これは回線上で発生します
LocalSessionFactoryModule.SetMappingAssemblies(() => new[] { typeof(ProviderMap).Assembly });
_kernel.Load<LocalSessionFactoryModule>();
_sessionFactory = _kernel.Get<ISessionFactory>();
ここで、LocalSessionFactoryModuleは、NinjectModuleクラスから派生したninjectモジュールクラスです。
これがncrunchでのみ発生するのはなぜですか?この問題を解決するにはどうすればよいですか?モジュールがすでにロードされているかどうかを確認する方法はありますか?