【问题标题】:What are some options for distributing reusable test classes with my NuGet package?使用我的 NuGet 包分发可重用测试类有哪些选项?
【发布时间】:2015-02-18 18:04:31
【问题描述】:

我目前有两个项目的解决方案设置:

MySolution
- MyClassLibrary
- MyClassLibrary.Tests

MyClassLibrary 项目作为 NuGet 包分发。 Tests 项目包含我目前未随 NuGet 包分发的所有单元测试。

问题是在 MyClassLibrary 内部,我的一个类接受 IMyRepository 作为构造函数参数(以允许依赖注入)。然后我在名为 IMyRepositoryTests 的 MyClassLibrary.Tests 项目中设置了一个抽象测试类。目的是当您编写自己的 IMyRepository 实现时,您可以编写一个简单地从 IMyRepositoryTests 继承的测试类,并传入一个具体类的实例,所有测试都会为您完成。

所以结构看起来像这样:

Solution
- MyClassLibrary
-- MyServiceClass(IMyRepository repository)
-- IMyRepository
- MyClassLibrary.Tests
-- MySericeClassTests
-- IMyRepostoryTests (abstract)

问题是 Tests 项目没有随 NuGet 包一起分发,因此如果有人想要对他们的 IMyRepository 的具体实现进行单元测试,他们将不得不编写自己的所有测试,而 (1) 不会采用我已经为他们编写的测试代码的优势和 (2) 可能不符合我为 IMyRepository 设计的规范。

如果我将 IMyRepositoryTests 移至 MyClassLibrary 项目,那么该项目将依赖于我的单元测试框架(Xunit 和 Moq)。这为不进行单元测试的人增加了不必要的依赖。

如果我将测试项目与 NuGet 包一起发布,那么我会创建相同的问题,而且将 NuGet 包与他们的单元测试一起发布似乎不是标准做法。

我可以将测试项目作为单独的 NuGet 包发布,但这似乎也很奇怪。

我还缺少其他选项吗?

【问题讨论】:

  • 为什么“将项目作为单独的 NuGet 包进行测试,但 这看起来很奇怪”?对我来说看起来是个不错的选择——我会在需要的地方添加常规包,并测试一个特定于我的框架的包(比如 Feature.Test.MSTest 或 Feature.Tests.XUnit` 来测试......)。我错过了什么吗?
  • 我绝对认为这是我提到的 3 个中的最佳选择,但我想尽可能避免维护单独的包。特别是因为这是一个内部 NuGet 包,不会在我的公司之外共享(因此可以合理地期望我们将在 Xunit/Moq 上标准化我们的单元测试框架)。我只是希望可能有一些我没有想到的其他选择或想法。

标签: c# .net visual-studio unit-testing nuget


【解决方案1】:

为您的测试程序集创建一个单独的包。您需要这样做,因为您的最终用户不希望将其包含在他们的主应用程序中,如果您将测试程序集与主程序集放在一起,就会发生这种情况。

【讨论】:

    猜你喜欢
    • 2019-09-05
    • 2019-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-16
    • 2014-04-18
    相关资源
    最近更新 更多