从另一个程序集更新数据保留类,而不将其公开访问

时间:2016-04-01 13:30:13

标签: c# .net builder

我正在开发一个项目,用于自动执行另一个程序完成的测试。因此,我有一个类,其中包含有关不同测试套件(基本类别)的信息,每个测试套件都包含测试。

包含测试信息的文件与程序在同一台计算机上,或者必须通过SSH访问,这就是为什么我有两个不同的类来填充TestSuitesInfo容器类。

这两个类是在单独的程序集中,所以我创建了一个更新接口,它将TestSuiteInfo对象传递给更新方法:

public interface ITestSuitesUpdater
{
    void Update(TestSuitesInfo info);
}

这里的问题是有人可以存储对TestSuiteInfo对象的引用,并在未调用update方法时对其进行修改。

我的解决方案的第一种方法是创建一个bool,指示对象是否可更新,如果不是则抛出AccessViolationException。但是,它对我来说根本不合适:

public class TestSuitesInfo
{
    private IDictionary<string, TestSuite> _testSuites;
    private bool _updateable = false;

    internal TestSuitesInfo(IDictionary<string, TestSuite> dictionary)
    {
        _testSuites = dictionary;
    }

    public void AddTestSuite(string name)
    {
        if (String.IsNullOrWhiteSpace(name))
            throw new ArgumentNullException(nameof(name));

        if (!_updateable)
            throw new AccessViolationException("TestSuiteInfo already created!");

        if (_testSuites.ContainsKey(name))
            return;

        _testSuites.Add(name, new TestSuite(name));
    }
...
}

我最后编写了一个TestSuitesInfoBuilder类并传递了它而不是TestSuitesInfo本身,这使我每次调用update方法时都会创建一个新的TestSuitesInfo实例。

现在,我仍然很好奇是否有更好的解决方案来解决这个问题。

1 个答案:

答案 0 :(得分:0)

您可以将this attribute放在其内部需要对测试项目可见的类中:

[assembly:InternalsVisibleTo(“YourTestAssemblyName)]