Ok。MSpecが静的メソッド/変数を使用する理由について頭を悩ませようとしています。(正確には静的メソッドではありませんが、メンバー変数デリゲートを使用すると、実質的に同じです)。
これにより、コンテキストを再利用できなくなります。それか、すべての静的変数が手動でリセットされていることを確認してください。これには、テストの分離に対する強制はありません。あるテストでいくつかの変数を設定し、次のテストでそれをチェックすると、合格すべきではないときに合格してしまいます。
これは非常に面倒になり始めています。同じコンテキストを共有しているという理由だけで、1 つの「because」ステートメントで行うことは、他のすべてのランダム テストに引き継がれるのではなく、そこにとどまるべきです。
編集-
問題は、どのようにテスト分離を「強制」するかです。たとえば、以下の仕様を見て、FooContext
. should_not_throw
合格するかどうか、大まかな推測をしましょう。
public class FooContext
{
Establish context = () => Subject = new Foo();
public static Foo Subject;
public static int result;
public static Exception ex;
}
public class When_getting_an_int_incorrectly : FooContext
{
Because of = () => ex = Exception.Catch(() => result = Subject.GetInt(null));
It should_throw = () => ex.ShouldNotBeNull();
}
public class When_getting_an_int_correctly : FooContext
{
Because of = () => ex = Exception.Catch(() => result = Subject.GetInt(0));
It should_not_throw = () => ex.ShouldBeNull();
}