c# – Internals,InternalsVisibleTo和测试共享行为
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – Internals,InternalsVisibleTo和测试共享行为,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1779字,纯文字阅读大概需要3分钟。
内容图文
![c# – Internals,InternalsVisibleTo和测试共享行为](/upload/InfoBanner/zyjiaocheng/772/3c4fbc76eb9d418d8a0c27e5ad8bea85.jpg)
我们有一个共享的基本接口公共接口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, 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() {}
}
内容总结
以上是互联网集市为您收集整理的c# – Internals,InternalsVisibleTo和测试共享行为全部内容,希望文章能够帮你解决c# – Internals,InternalsVisibleTo和测试共享行为所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。