MSTest中忽略来自通用基类的inheritance测试类

在MSTest中创建通用基本测试类并从中inheritance时,我无法运行所有inheritance类的测试。

单元测试结果

BaseDependencyPropertyFactoryTest位于Whathecode.PresentationFramework.Tests程序集中 。 它是通用基类。 ( BaseDependencyPropertyFactoryTest

两个程序集都有一个inheritance自此基类的测试,称为DependencyPropertyFactoryTest 。 所有inheritance的类都传递一个特定的类型参数。

[TestClass] public class DependencyPropertyFactoryTest : BaseDependencyPropertyFactoryTest { } 

似乎只运行与基类位于同一程序集中的inheritance测试。 Whathecode.PresentationFramework.Aspects.Tests程序集中的inheritance测试似乎完全被忽略。

我究竟做错了什么? 如果需要,我可以上传所有必需的源代码,但是你需要PostSharp才能进行方面组装。


作为测试,我尝试将一个测试添加到方面程序集中的inheritance测试类中,该程序集调用基本测试类中的所有测试。

 [TestMethod] public void AllBaseTests() { ClrGetterSetterTest(); DependencyPropertyGetterSetterTest(); } 

这给出了以下结果。 奇怪的是,这个测试被执行了! 现在,这可能是一种至少运行它们的方法,但是当然每次在基类中添加额外的测试时我都不想编辑这个测试。

编辑后的单元测试结果

为什么跳过那些基础测试,为什么指示’中止’?

其原因与generics有关,但测试在不同的程序集中。

Microsoft Connect建议描述了问题: “Visual Studio测试(MSTest)和缺少对驻留在不同程序集中的基类的inheritance支持。” 它被标记为“固定”,但似乎尚未在Visual Studio 2010中修复,或许它仍然需要发布?

这个问题有一个有趣的解决方法:

您可以通过将包含基类的源文件编译到希望从该基类派生的所有测试项目中来解决此问题。 将项目添加为“链接”,这样您就不会得到基类的源文件的多个副本。

这对我有用,我觉得这个解决办法太难看了。

没什么特别的,但通过调用基本方法解决问题的另一种方法是:

 public abstract class AccountBaseTest { protected abstract IAccountRepository GetAccountRepository(); public void _submitAccountToLMS_BlankAccount_NewLmsID() { Account account = new Account(GetAccountRepository()); account.FirstName = Faker.FirstName(); account.LastName = Faker.LastName(); account.SubmitToLms(); Assert.IsTrue(account.LmsID > 0); } } [TestClass] public class AccountIntegrationTest { protected override IAccountRepository GetAccountRepository() { return new AccountRepository(); } [TestMethod] public void SubmitAccountToLMS_BlankAccount_NewLmsID() { base._submitAccountToLMS_BlankAccount_NewLmsID(); } } 

希望VS 2012能解决这个问题….

Steven将添加基类源文件作为链接然后将其编译到测试dll中的答案也适用于我。

但是,从VS 2013 Update 2开始,现在有一个“共享项目”的概念,这是一种forms化将源代码从另一个项目引入项目然后将它们编译为一个的想法。

这就是我做的

  1. 创建新的“共享项目”项目
  2. 将当前测试基类(和其他所需文件)移动到共享项目中
  3. 从测试项目添加对共享项目的引用(更多内容见下文)
  4. 编译,测试和快乐

至少在VS2015 Update 2上,第3步并不像我认为的那样直截了当。 根据这个答案, Visual Studio没有为您提供将共享项目链接到测试项目的简单方法(如图…)。 这就是我必须做的事情:

  1. 卸载.csproj文件,
  2. 右键单击并编辑.csproj文件
  3. 一直到底部并将其添加到分组的开头(根据需要修复路径和名称,确保添加Label="Shared" !):

      
  4. 保存并关闭文件

  5. 重新加载项目

这已得到修复,并在1.1.17版本中发布:

框架: https : //www.nuget.org/packages/MSTest.TestFramework/1.1.17

适配器: https : //www.nuget.org/packages/MSTest.TestAdapter/1.1.17

参考文献:

  1. GitHub问题: https : //github.com/Microsoft/testfx/issues/23
  2. UV项目: https : //visualstudio.uservoice.com/forums/330519-team-services/suggestions/6030736-support-test-inheritance-for-base-classes-in-differ
Interesting Posts