使用我的 NuGet 包分发可重用测试 类 有哪些选项?

What are some options for distributing reusable test classes with my NuGet package?

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

MySolution
- MyClassLibrary
- MyClassLibrary.Tests

MyClassLibrary 项目作为 NuGet 包分发。测试项目包含我所有的单元测试,这些单元测试当前未随 NuGet 包一起分发。

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

因此结构如下所示:

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

问题是测试项目没有随 NuGet 包一起分发,所以如果有人想对他们的 IMyRepository 的具体实现进行单元测试,他们将不得不编写他们自己的所有测试,其中 (1)没有利用我已经为他们编写的测试代码,并且 (2) 可能不符合我为 IMyRepository 设计的规范。

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

如果我将测试项目与 NuGet 包一起发布,则会产生相同的问题,而且将 NuGet 包与单元测试一起发布似乎不是标准做法。

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

还有我遗漏的其他选项吗?

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