Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用我的NuGet包分发可重用测试类有哪些选项?_C#_.net_Visual Studio_Unit Testing_Nuget - Fatal编程技术网

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上标准化我们的单元测试框架)。我只是希望有一些我没有想到的其他选择或想法。