我目前有一个包含两个项目的解决方案设置:
MySolution
- MyClassLibrary
- MyClassLibrary.Tests
MyClassLibrary 项目作为 NuGet 包分发。 Tests 项目包含我的所有单元测试,这些单元测试当前未随 NuGet 包一起分发。
问题是在 MyClassLibrary 内部,我的一个类接受 IMyRepository 作为构造函数参数(以允许依赖注入(inject))。然后,我在名为 IMyRepositoryTests 的 MyClassLibrary.Tests 项目中设置了一个抽象测试类。目的是当您编写自己的 IMyRepository 实现时,您可以编写一个简单地继承 IMyRepositoryTests 的测试类并传入具体类的实例,所有测试都会为您完成。
所以结构看起来是这样的:
Solution
- MyClassLibrary
-- MyServiceClass(IMyRepository repository)
-- IMyRepository
- MyClassLibrary.Tests
-- MySericeClassTests
-- IMyRepostoryTests (abstract)
问题是测试项目没有随 NuGet 包一起分发,所以如果有人想对他们的 IMyRepository 的具体实现进行单元测试,他们将不得不编写他们自己的所有测试,其中 (1) 不会采用利用我已经为他们编写的测试代码,并且 (2) 可能不符合我为 IMyRepository 设计的规范。
如果我将 IMyRepositoryTests 移动到 MyClassLibrary 项目,那么该项目将依赖于我的单元测试框架(Xunit 和 Moq)。这为不进行单元测试的人增加了不必要的依赖。
如果我将测试项目与 NuGet 包一起发布,那么我会产生同样的问题,而且将 NuGet 包与它们的单元测试一起发布似乎不是标准做法。
我可以将测试项目作为单独的 NuGet 包发布,但这看起来也很奇怪。
我还缺少其他选项吗?
最佳答案
为您的测试程序集创建一个单独的包。您需要这样做,因为您的最终用户不希望将它包含在他们的主应用程序中,如果您将测试程序集与主程序集放在一起,就会发生这种情况。
关于c# - 使用我的 NuGet 包分发可重用测试类有哪些选项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28590671/