c# – 每个测试类的多个ClassCleanup属性
发布时间:2020-12-15 20:59:25 所属栏目:百科 来源:网络整理
导读:情况:我的一些集成测试类共享一种在数据库中设置场景的通用方法,因此我提供了一个抽象基类.在所有测试运行后,它还会在最后完成数据清理: public abstract class IntegrationTests{ ... protected static void Cleanup() { ... }} 我的继承类需要调用基本方
情况:我的一些集成测试类共享一种在数据库中设置场景的通用方法,因此我提供了一个抽象基类.在所有测试运行后,它还会在最后完成数据清理:
public abstract class IntegrationTests { ... protected static void Cleanup() { ... } } 我的继承类需要调用基本方法以确保我的基本清理代码运行: [TestClass] public class FooIntegrationTests : IntegrationTests { ... [ClassCleanup] public static void FooCleanup() { ... Cleanup(); } } 问题:根据MSDN“[类]一个类中的一个方法可能用[ClassCleanup]属性进行修饰”所以我不能从基类中修饰Cleanup方法,即使我做了这个方法也不会被调用. 问题:我想要一个解决方案 >始终从基类运行Cleanup方法,而不在继承的类中实现任何内容,以及 我不喜欢强制继承测试类显式调用基类,因为我必须记住实现它.我更喜欢更优雅而简单的(!)技术.有任何想法吗? 注意:为所有测试类共享的基本功能提供单例不起作用,因为我在多个测试代理上并行运行测试,所有测试代理都连接到同一个数据库实例. 解决方法
根据评论中的答案,调用ClassCleanup不再发挥作用.
我在工作中一直这样做.您所要做的就是将基类作为测试类固定,并在那里“花费”您的清理和拆除属性.如果您需要在派生类中进行清理/拆卸,只需创建一个虚拟方法,您可以在需要时立即执行: [TestClass] public abstract class BaseIntegrationTest { [TestInitialize] public void BeforeEach() { // Stuff that should happen before each unit test BaseTestInitialize(); } [TestCleanup] public void AfterEach(){ // Stuff that should happen after each unit test BaseTestCleanup(); } public virtual void BaseTestInitialize() { } public virtual void BaseTestCleanup() { } } 使用此构造,您在集成测试中所要做的就是覆盖BaseTestCleanup(): [TestClass] public class DerivedTestClass : BaseIngetrationTest { public override void BaseTestCleanup() { // Derived cleanup base.BaseTestCleanup(); } [TestMethod] public void SomeMethod_SomeCriteria_SomeResult() { // Arrange // Act // Assert } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |