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

时间:2015-02-18 18:04:31

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

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

MySolution
- MyClassLibrary
- MyClassLibrary.Tests

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

问题是在MyClassLibrary中,我的一个类接受一个I​​MyRepository作为构造函数参数(允许依赖注入)。然后,我在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包发布,但这看起来也很奇怪。

我还缺少其他选项吗?

1 个答案:

答案 0 :(得分:5)

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