2017-09-28 14 views
1

私はすべてのテストの周りに簡単なトランザクションを設定する私の単体テストの基本クラスを持っています。クラスのすべてのテストが完了した後、これはロールバックしなければならない - 私は、これらのテストのいずれかが実行される前に、一度やってみたい仕事の束を持って、私の継承クラスのいずれかでTestInitializeのTransactionAbortedException

public class TestBase 
{ 
    TransactionScope _trans; 

    [TestInitialize()] 
    public void Init() 
    { 
     _trans = new TransactionScope(); 
    } 

    [TestCleanup()] 
    public void Cleanup() 
    { 
     _trans.Dispose(); 
    } 
} 

[TestClass] 
public class MyTests : TestBase 
{ 
    static TransactionScope _transClass; 
    [ClassInitialize()] 
    public static void ClassInit(TestContext context) 
    { 
     _transClass = new TransactionScope(); 
     //do some setup 
    } 

    [ClassCleanup()] 
    public static void ClassCleanup() 
    { 
     _transClass.Dispose(); 
    } 

    [TestMethod()] 
    public void TestMethod() 
    { 
     //do some testing 
    } 
} 

私の実際のクラスには、もちろん複数のテスト方法があります。最初のテストメソッドは成功しますが、TestInitializeで新しいTransactioScopeを設定しようとすると、2番目のメソッドはTransactionAbortedExceptionをスローします。誰かが私がここで間違って設定したことを説明してもらえますか?

答えて

0

基本クラスTestBaseが各テスト後に接続で何かをしている可能性があります。

usingの文章との取引を使用することをお勧めします。あなたのような問題は排除されます。

また、1回のトランザクションで複数のテストを行うことは良い考えではありません。つまり、テストは相互依存しています。これは、グループ内で実行されているか、または単独で実行されているかによって、テストが合格または失敗したときに問題を追跡するのを困難にします。

要約すると、私はトランザクションのメンバフィールドを持つことをアドバイスし、usingステートメントでローカル変数を使用します。

関連する問題