我正在开发一个项目,用于自动执行另一个程序完成的测试。因此,我有一个类,其中包含有关不同测试套件(基本类别)的信息,每个测试套件都包含测试。
包含测试信息的文件与程序在同一台计算机上,或者必须通过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实例。
现在,我仍然很好奇是否有更好的解决方案来解决这个问题。
答案 0 :(得分:0)
您可以将this attribute放在其内部需要对测试项目可见的类中:
[assembly:InternalsVisibleTo(“YourTestAssemblyName)]