2011-03-02 4 views
7

테스트를 통해 사용중인 데이터베이스를 초기화하고 정리하는 데 사용되는 몇 가지 방법이 있지만 AssemblyInitialize 및 AssemblyCleanup 특성을 가진 메서드는 실행되지 않습니다.AssemblyCleanup가 실행되지 않음

아이디어가 있으십니까?

[TestInitialize] 
    public void Init() 
    { 
     LoadData(); 
    } 

    [AssemblyInitialize] 
    public void AssemblyInit() 
    { 

    } 

    public void LoadData(string testDataFileName = "TestData.xml") 
    { 
     connectionString = ConfigurationManager.ConnectionStrings["NDbUnit"].ConnectionString; 

     mySqlDatabase = new NDbUnit.Core.SqlClient.SqlDbUnitTest(connectionString); 

     mySqlDatabase.ReadXmlSchema("DataSet.xsd"); 
     mySqlDatabase.ReadXml(testDataFileName); 

     mySqlDatabase.PerformDbOperation(NDbUnit.Core.DbOperationFlag.CleanInsertIdentity); 

     dataSet = mySqlDatabase.CopyDataSet(); 
    } 

    [AssemblyCleanup] 
    public void RemoveDatabases() 
    { 
     List<string> databasesToDelete = new List<string>(); 
     ServerConnection serverConnection = new ServerConnection(new SqlConnection(connectionString)); 
     Server server = new Server(serverConnection); 
     foreach (Database db in server.Databases) 
     { 
      if (db.Name.ToLower().Contains(testDatabaseIdentifier)) 
      { 
       databasesToDelete.Add(db.Name); 
      } 
     } 
     databasesToDelete.ForEach(x => 
     { 
      Database db = new Database(server, x); 
      db.Refresh(); 
      db.Drop(); 
     }); 
    } 

    [TestCleanup] 
    public void CleanUpData() 
    { 
     mySqlDatabase.PerformDbOperation(NDbUnit.Core.DbOperationFlag.DeleteAll); 
    } 
+0

이있다? –

+0

할 수 있습니다. 그냥 몇 분이 걸릴 것입니다 – khr055

+1

Btw, 나는 그 데이터베이스를 AssemblyCleanup 속성을 가진 메소드에서 삭제하려고하고 있음을 언급해야합니다. 그게 내 마음을 잃지 않아. – khr055

답변

12

알아 냈어. 이전에 게시 된 메소드는 나머지 테스트 케이스가 상속 할 기본 클래스에 있었지만 기본 클래스는 TestClass로 표시되지 않았습니다. 분명히, 그것 없이는 TestInitialize와 TestCleanup 메쏘드를 실행할 수 있지만 Assembly는 안됩니다. <

5

AssemblyCleanup는

static public void AssemblyCleanup 

이 클래스는 공개 먹으 렴 확인하고 당신이 우리에게 코드의 일부를 보여줄 수있는 TestClass 속성

관련 문제