我们有一个共享的基本界面public interface IOperation {...}
和许多(几十个,很快就有100多个)实现IOperation
的不同对象。
我们还对所有这些实现进行了测试,所有这些实现都继承自名为TestOperationCommon
的基类,这些基类使用实际操作类进行模板化,并将Create方法的类型模板化为new
这样的操作。我们为TestOperationCommon实现了一个最多五个模板参数(这对所有操作都足够了)。
现在,最近决定将所有操作实现内部并且只有IOperation
公开,这似乎是一个好主意,因为那些操作是实现细节。 [InternalsVisibleTo(...)]
测试似乎也解决了。
然而,现在我看到我们不能再使用我们的测试结构,因为公共测试类的通用参数现在是内部的(至少是测试中的实际类),这导致
Inconsistent Accessibility .... less accessible than ...
错误。下面的代码,公共测试类不能从TestOperationCommon继承内部的泛型参数T.但是将所有这些共享行为测试复制到特定测试中似乎也是一个坏主意。
有没有办法让vstest框架(VS2013 +)测试内部的[TestClass]
?
还是有另一种方法可以保持共享测试而不必复制大量代码吗?
或者我们做错了(将这些“实施细节 - 类”内部化)?
代码示例作为评论中的请求:
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() {}
}
答案 0 :(得分:1)
你能创建一个测试包装类吗?
类似的东西:
[TestClass]
public class AnnoyingTestSomeOperationWrapper
{
[TestMethod]
public void TestSpecificSomeOperationStuff()
{
new TestSomeOperation().TestSpecificSomeOperationStuff()
}
}
internal class TestSomeOperation : TestOperationCommon<SomeOperation, ...>
{
public void TestSpecificSomeOperationStuff() {}
}