【发布时间】:2016-04-21 20:55:28
【问题描述】:
情况:我的一些集成测试类共享一种在数据库中设置场景的通用方法,因此我提供了一个抽象基类。在所有测试运行后,它还会在最后进行完整的数据清理:
public abstract class IntegrationTests
{
...
protected static void Cleanup() { ... }
}
我的继承类需要调用基本方法以确保我的基本清理代码运行:
[TestClass]
public class FooIntegrationTests : IntegrationTests
{
...
[ClassCleanup]
public static void FooCleanup()
{
...
Cleanup();
}
}
问题:根据MSDN“[o]只有一个类中的一个方法可以用[ClassCleanup]属性修饰”,所以我不能从基类中修饰Cleanup方法即使我这样做了,该方法也不会被调用。
问题:我想要一个解决方案
- 始终从基类运行
Cleanup方法,而不在继承的类中实现任何内容,和 - 始终从继承的测试类运行自定义清理方法(如果有)。
我不喜欢强制继承的测试类显式调用基类,因为我必须记住实现它。我更喜欢更优雅但更简单(!)的技术。有什么想法吗?
注意:为我的基本功能提供一个由所有测试类共享的单例不起作用,因为我在多个测试代理上并行运行测试,所有测试代理都连接到同一个数据库实例。
【问题讨论】:
-
ClassCleanup属性只能分配给静态方法。virtual和override关键字只能用于实例方法。 -
啊,对,我在考虑通常的设置/拆卸。道歉。
-
静态方法/类破坏了正常的继承规则。所以不,我不确定除了从继承类中调用 Cleanup 之外,您还能做些什么。
标签: c# inheritance integration-testing mstest