Internals, InternalsVisibleTo和testing共享行为
本文关键字:共享 testing InternalsVisibleTo Internals | 更新日期: 2023-09-27 18:08:10
我们有一个共享的基本接口public interface IOperation {...}
和许多(几十个,很快100多个)实现IOperation
的不同对象。
我们还对所有这些实现进行了测试,所有这些实现都继承自称为TestOperationCommon
的基类,这些基类被模板化为new
这样一个操作的创建方法的实际操作类和类型。我们有TestOperationCommon的实现,有一个到五个模板参数(这对所有操作都足够了)。
现在,最近决定使所有的操作实现内部,只有IOperation
是公共的,这似乎是一个好主意,因为这些操作是实现细节。有了[InternalsVisibleTo(...)]
,测试似乎也解决了。
Inconsistent Accessibility .... less accessible than ...
错误。下面的代码,一个公共测试类不能从TestOperationCommon继承一个内部的泛型参数T。但是,将所有这些共享行为测试复制到特定测试中似乎也是一个坏主意。
是否有一种方法可以获得最测试框架(VS2013+)来测试内部的
[TestClass]
es ?或者是否有其他方法可以保持共享测试而不必复制大量代码?
或者我们做错了(使那些'实现细节类'内部)?
注释中请求的代码示例:
public interface IOperation { ... }
internal class SomeOperation : IOperation
{
public SomeOperation(A a, B b, C c) {...}
}
public abstract TestOperationCommon<T, A, B, C>
where T : IOperation
where ...
{
protected abstract T Create(A a, B b, C c);
[TestMethod]
public void TestCommonOperationBehavior()
{
var op = Create(Mock.Of<A>(), Mock.Of<B>(), Mock.Of<C>);
...
}
}
[TestClass]
public class TestSomeOperation : TestOperationCommon<SomeOperation, ...>
{
[TestMethod]
public void TestSpecificSomeOperationStuff() {}
}
您可以创建一个测试包装器类吗?
类似:
[TestClass]
public class AnnoyingTestSomeOperationWrapper
{
[TestMethod]
public void TestSpecificSomeOperationStuff()
{
new TestSomeOperation().TestSpecificSomeOperationStuff()
}
}
internal class TestSomeOperation : TestOperationCommon<SomeOperation, ...>
{
public void TestSpecificSomeOperationStuff() {}
}