2012-04-30 5 views
9

단위 테스트를 사용자 지정 ConfigurationElementCollection, 시도하고 있지만 프로그래밍 방식으로 컬렉션을 채우는 데 문제가 있습니다. BaseAdd()을 호출하면 다음 예외가 발생합니다.프로그래밍 방식으로 ConfigurationElementCollection에 요소를 추가하려면 어떻게해야합니까?

ConfigurationErrorsException : 요소 '추가'가 상위 구성에서 잠겼습니다.

그러나이 문제는 여러 테스트를 실행할 때만 나타납니다. 다음 두 가지 테스트를 고려하십시오.

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

나는 잠금 장치가 작동하는 방법을 아직 완전히 모르겠다.하지만 최소한 새로운 장치를 추가하기 전에 해결 방법을 찾았습니다. 새 항목을 추가하기 전에 LockItem을 false로 설정하십시오.

그래서 내 사용자 정의 ConfigurationElementCollection에는 Add() (나는 OP에서 호출하고 있음) 메서드가 있습니다. 다음과 같이 수정해야합니다.

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

TenantCollection 구현의 IsReadOnly 메서드를 재정의하고 false를 반환 할 수 있습니다. –

관련 문제