【问题标题】:How to run tests from an external assembly如何从外部程序集运行测试
【发布时间】:2015-02-23 20:16:52
【问题描述】:

这就是我想要实现的目标。我正在通过 nuget 提供一些代码,并且还希望发布第二个包含测试的 nuget,以验证服务是否正常工作/部署。此测试 nuget 将包含所有核心测试,无需任何修改(通过配置文件除外)。

这是 Assembly A 的基类:

[TestClass]
public abstract class BaseTestClass
{
    [TestCleanup]
    public void TearDown()
    {
        // do some cleanup...
    }

    [TestMethod]
    public void BaseTest()
    {
        // base test code...
    }
}

现在,我想将这个 Assembly A 引用到另一个 Assembly B 并执行以下操作:

[TestClass]
public class ChildTestClass : BaseTestClass
{ }

问题是,测试资源管理器看不到 BaseTest 方法。它只会看到在子类本身中声明的测试方法。未正确发现基类中的任何测试方法。

我该怎么做?

仅供参考:当我做同样的事情但都在同一个程序集/项目中时,它工作正常。我正在使用 MSTest 和 ReSharper 测试运行器。 MSTest 不显示任何内容,但 ReSharper 有时会显示基本测试但从不运行它,即使我能够选择并运行特定的测试,它也将始终只运行在子类中声明的测试。

【问题讨论】:

  • 我已经编辑了你的标题。请参阅“Should questions include “tags” in their titles?”,其中的共识是“不,他们不应该”。
  • @JohnSaunders,感谢您的编辑。我不知道这个规则。
  • 试用 NUnit 2.6.4。我刚刚将我的一个 TestBaseClass 移动到一个单独的 DLL 中,它继续工作。不是答案,至少不是您正在寻找的答案,但即使迁移有点费力,它仍然是一种选择。

标签: c# .net inheritance testing mstest


【解决方案1】:

讨厌成为坏消息的传播者,但简单地说你不能。

Visual Studio 不支持这个。有一个 userVoice 项目有望在未来添加支持,但在此之前您无法以这种方式构建您的测试。

http://visualstudio.uservoice.com/forums/121579-visual-studio/suggestions/6030736-support-test-inheritance-for-base-classes-in-diffe

FYI 官方 MS 回复确认: https://connect.microsoft.com/VisualStudio/feedback/details/989781

【讨论】:

  • 感谢您的详细解答。我也知道这是特定于 MSTest 的,那么使用 Resharper 呢?能行吗?
  • 似乎很可能,尽管我不知道他们的测试运行程序在内部是如何工作的。如果它只是通过掩护下的 MSTest 程序集,它可能会遭受相同的错误。如果不是,我认为它很有可能工作。如果我有 Re#er 的副本,我会尝试为您快速测试它,但我不久前停止使用它,因为我的主要解决方案太大而无法使用它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多