2012-04-30 3 views
9

Я пытаюсь выполнить тестирование на заказ ConfigurationElementCollection, но у меня возникла проблема с программным обеспечением заполнения коллекции. Когда я звоню BaseAdd(), я получаю следующее исключение:Как программно добавлять элементы в ConfigurationElementCollection?

ConfigurationErrorsException: Элемент 'add' был заблокирован в конфигурации более высокого уровня.

Однако эта проблема возникает только при выполнении нескольких тестов. Рассмотрим эти два теста:

private Fixture Fixtures = new Fixture(); // AutoFixtures 

[Test] 
public void test1() 
{ 
    var tc = Fixtures.CreateAnonymous<TenantCollection>(); 
    var t = Fixtures.CreateAnonymous<Tenant>(); 
    tc.Add(t); 
} 

[Test] 
public void test2() 
{ 
    var tc = Fixtures.CreateAnonymous<TenantCollection>(); 
    var t = Fixtures.CreateAnonymous<Tenant>(); 
    tc.Add(t); 
} 

Каждый отдельный тест проходит, когда выполняется один. При запуске вместе генерируется исключение блокировки.

Что здесь происходит? Как я могу разблокировать коллекцию или обойти эту блокировку?

ответ

18

Я все еще не совсем уверен, как работает ConfigurationElement, но я нашел обходное решение, которое кажется прекрасным для модульного тестирования, по крайней мере: перед добавлением новых элементов установите LockItem на false.

У меня есть способ ConfigurationElementCollection У меня есть метод Add() (который я вызываю в OP). Его необходимо изменить так, чтобы он выглядел так:

public class TenantCollection : ConfigurationElementCollection 
{ 
    public void Add(Tenant element) 
    { 
     LockItem = false; // the workaround 
     BaseAdd(element); 
    } 
} 
+2

Вы также можете переопределить метод IsReadOnly из своей реализации TenantCollection и вернуть false –

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