2012-04-30 5 views
9

私はユニットConfigurationElementCollectionをカスタムテストしようとしていますが、プログラム的にコレクションに値を設定する問題があります。ConfigurationElementCollectionに要素をプログラムで追加するにはどうすればよいですか?

ConfigurationErrorsException:要素「追加」より高いレベルの構成でロックされている私はBaseAdd()を呼び出すと、私は次の例外を取得します。

ただし、この問題は、複数のテストを実行している場合にのみ表示されます。

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を返すこともできます –

関連する問題