C# 使用我的NuGet包分发可重用测试类有哪些选项?
我目前有一个包含两个项目的解决方案设置:C# 使用我的NuGet包分发可重用测试类有哪些选项?,c#,.net,visual-studio,unit-testing,nuget,C#,.net,Visual Studio,Unit Testing,Nuget,我目前有一个包含两个项目的解决方案设置: MySolution - MyClassLibrary - MyClassLibrary.Tests MyClassLibrary项目作为NuGet包分发。测试项目包含当前未随NuGet包分发的所有单元测试 问题是在MyClassLibrary内部,我的一个类接受IMyRepository作为构造函数参数(以允许依赖项注入)。然后,我在MyClassLibrary.Tests项目中设置了一个抽象测试类,名为IMyRepositoryTests。这样做的
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)可能不符合我打算用于存储的规范
如果我将IMyRepositoryTests移动到MyClassLibrary项目中,那么该项目将依赖于我的单元测试框架(Xunit和Moq)。这为没有进行单元测试的人增加了不必要的依赖关系
如果我将测试项目与NuGet包一起发布,那么我将创建相同的问题,而且将NuGet包与单元测试一起发布似乎不是标准做法
我可以将测试项目作为一个单独的NuGet包发布,但这似乎也很奇怪
是否有我缺少的其他选项?为测试程序集创建一个单独的包。您将希望这样做,因为您的最终用户不希望将其包含在他们的主应用程序中,如果您将测试程序集与主程序集一起放入,则会发生这种情况。为测试程序集创建单独的包。您希望这样做,因为您的最终用户不希望将其包含在主应用程序中,如果您将测试程序集与主程序集放在一起,就会发生这种情况。为什么“测试项目作为一个单独的NuGet包进行,但这似乎很奇怪”?对我来说似乎是个不错的选择-我会在需要的地方添加常规包,并测试一个特定于我的框架的包(比如
Feature.test.MSTest
或Feature.Tests.XUnit`到Tests…)。我是否遗漏了什么?我肯定认为这是我提到的3个包中最好的选择,但如果可能的话,我希望避免维护单独的包。特别是因为这是一个内部NuGet包,不会在我的公司之外共享(因此我们有理由期望我们将在Xunit/Moq上标准化我们的单元测试框架)。我只是希望有一些我没有想到的其他选择或想法。为什么“测试项目作为一个单独的NuGet包,但这似乎很奇怪”?对我来说似乎是个不错的选择-我会在需要的地方添加常规包,并测试一个特定于我的框架的包(比如Feature.test.MSTest
或Feature.Tests.XUnit`到Tests…)。我是否遗漏了什么?我肯定认为这是我提到的3个包中最好的选择,但如果可能的话,我希望避免维护单独的包。特别是因为这是一个内部NuGet包,不会在我的公司之外共享(因此我们有理由期望我们将在Xunit/Moq上标准化我们的单元测试框架)。我只是希望有一些我没有想到的其他选择或想法。