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

Kev*_*aft 1 .net c# unit-testing visual-studio nuget

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

MySolution
- MyClassLibrary
- MyClassLibrary.Tests
Run Code Online (Sandbox Code Playgroud)

MyClassLibrary项目作为NuGet包分发.测试项目包含我目前未与NuGet包一起分发的所有单元测试.

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

所以结构看起来像这样:

Solution
- MyClassLibrary
-- MyServiceClass(IMyRepository repository)
-- IMyRepository
- MyClassLibrary.Tests
-- MySericeClassTests
-- IMyRepostoryTests (abstract)
Run Code Online (Sandbox Code Playgroud)

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

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

如果我使用NuGet包发送测试项目,那么我会创建相同的问题,而且看起来像使用单元测试发送NuGet包似乎不是标准做法.

我可以将Tests项目作为单独的NuGet包发布,但这看起来也很奇怪.

我还缺少其他选择吗?

And*_*ndy 5

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