VS2012 で単体テストを実行すると、奇妙な問題が発生します。私は NUnit を使用しており、それらを ReSharper で実行しています。すべてのテストが機能しています。しかし、同僚がテストを実行するとき、一部の同僚は ReSharper を持っていないため、拡張機能NUnit Test Adapter (Beta 3) v0.95.2 ( http://visualstudiogallery.msdn.microsoft.com/6ab922d0 ) でテスト エクスプローラーを使用しています。 -21c0-4f06-ab5f-4ecd1fe7175d )。ただし、その拡張機能を使用すると、一部のテストが失敗します。
失敗する特定のコードは次のとおりです。
public void Clear()
{
this.Items.ForEach(s => removeItem(s));
}
private bool removeItem(SequenceFlow item)
{
int i = this.Items.IndexOf(item);
if (i == -1)
return false;
this.Items.RemoveAt(i);
return true;
}
例外は次のとおりです。
System.InvalidOperationException : Collection was modified; enumeration operation may not execute.
Result StackTrace:
at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
at System.Collections.Generic.List`1.ForEach(Action`1 action)
今、私はなぜこの例外が発生したのかを答えるために探していません.なぜそれが失敗するのか理解できます. しかし、私が理解できないのは、Test Exporer ではテストが失敗するのに、ReSharper では失敗しない理由です。テストの動作が異なるのはなぜですか?
ildasm.exe を使用して、2 つのケースをテストするときにコードのコンパイルが異なるかどうかを確認しましたが、IL コードは同じです。
テストは、Team City サーバーでのコミット中にもエラーなしで実行されます。
さらに、テストをデバッグするときに、NUnit テスト アダプターを介してデバッグするときに同じ例外が発生しますが、ReSharper を使用してコードをデバッグおよびステップ実行すると、例外はまったく発生しません。