11

我正在尝试对 custom 进行单元测试ConfigurationElementCollection,但在以编程方式填充集合时遇到问题。当我打电话时BaseAdd(),我得到以下异常:

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

每个单独的测试在单独执行时都会通过。一起运行时,会抛出锁定异常。

这里发生了什么?我怎样才能解锁收藏或解决该锁?

4

1 回答 1

21

我仍然不完全确定ConfigurationElement锁定是如何工作的,但我确实找到了一个至少对于单元测试来说似乎很好的解决方法:在添加新项目之前,设置LockItem为 false。

所以在我的自定义中,ConfigurationElementCollection我有方法Add()(我在 OP 中调用)。它需要修改为如下所示:

public class TenantCollection : ConfigurationElementCollection
{
    public void Add(Tenant element)
    {
        LockItem = false;  // the workaround
        BaseAdd(element);
    }
}
于 2012-05-07T16:20:36.940 回答