我们有一个共享的基本接口公共接口IOperation {…}和很多(几十个,很快就有100个)实现IOperation的不同对象.
我们还对所有这些实现进行了测试,所有这些实现都继承自名为TestOperationCommon的基类,这些基类使用实际操作类进行模板化,并将Create方法的类型模板化为新的此类操作.我们为TestOperationCommon实现了一个最多五个模板参数(这对所有操作都足够了).
现在,最近决定将所有操作实现内部并且只公开IOperation,这似乎是一个好主意,因为那些操作是实现细节.而[InternalsVisibleto(…)]测试似乎也解决了.
但是,现在我看到我们不能再使用我们的测试结构,因为公共测试类的通用参数现在是内部的(至少是测试中的实际类),这导致
可访问性不一致….比…更难访问
错误.下面的代码,公共测试类不能从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,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() {} }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。