2008-11-21 2 views
0
public class RollBack : OnMethodBoundaryAspect // or another AOP for meth interception 
{ 
    public override void OnEntry(MethodExecutionEventArgs eventArgs) 
    { 
     try 
     { 
      ServiceConfig cfg = new ServiceConfig(); 
      cfg.Transaction = TransactionOption.RequiresNew; 
      cfg.TrackingAppName = "Application Unit Tests"; 
      cfg.TransactionDescription = "Application Unit Tests Transaction"; 
      cfg.TransactionTimeout = 0x2710; 
      ServiceDomain.Enter(cfg); 
     } 
     catch (Exception exception) 
     { 
      Console.WriteLine("Could not enter into a new transaction:\n" + exception); 
     } 
    } 

    public override void OnExit(MethodExecutionEventArgs eventArgs) 
    { 
     try 
     { 
      if (ContextUtil.IsInTransaction) 
      { 
       ContextUtil.SetAbort(); 
      } 
      ServiceDomain.Leave(); 
     } 
     catch (Exception exception) 
     { 
      Console.WriteLine("Could not leave an existing transaction:\n" + exception); 
     } 
    } 
} 
+0

Что вопрос - как проверить код, приведенный выше? – 2008-11-21 08:15:38

ответ

0

Я вижу, что вы тактически проверяете транзакцию, чтобы откатиться после тестирования.

Я лично начинаю с нуля и создаю таблицы для теста и удаляю их впоследствии. Другим распространенным методом является восстановление базы данных до известного состояния - хотя я бы предположил, что это указывает на слишком большие тесты, если они полагаются на множество состояний в базе данных.

Я написал об этом для PHP, но чаще всего работаю в .NET.

http://www.stevefenton.co.uk/Content/Blog/Date/201110/Blog/Database-Integration-Testing-With-Enhance-PHP/

Смежные вопросы