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