情况:我的一些集成测试类共享一种在数据库中设置场景的通用方法,因此我提供了一个抽象基类.在所有测试运行后,它还会在最后完成数据清理:
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 } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。