2012-04-30 11 views
9

Próbuję przeprowadzić test jednostkowy niestandardowego ConfigurationElementCollection, ale mam problem programowo zapełniający kolekcję. Gdy zadzwonię pod numer BaseAdd(), otrzymuję następujący wyjątek:Jak programowo dodawać elementy do ConfigurationElementCollection?

ConfigurationErrorsException: Element "add" został zablokowany w konfiguracji wyższego poziomu.

Jednak ten problem pojawia się tylko podczas uruchamiania wielu testów. Rozważ te dwa testy:

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); 
} 

Każdy pojedynczy test przechodzi po wykonaniu samodzielnie. Po uruchomieniu razem generowany jest wyjątek blokowania.

Co tu się dzieje? Jak mogę odblokować kolekcję lub obejść ten zamek?

Odpowiedz

18

Nadal nie jestem do końca pewien, jak działa blokowanie , ale znalazłem obejście, które wydaje się w porządku, jeśli chodzi o testowanie jednostkowe: przed dodaniem nowych elementów, ustaw LockItem na fałsz.

Tak więc w moim niestandardowym ConfigurationElementCollection mam metodę Add() (którą wywołuję w OP). Musi zostać zmodyfikowany, aby wyglądał tak:

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

Możesz również zastąpić metodę IsReadOnly ze swojej implementacji TenantCollection i zwrócić wartość false –

Powiązane problemy