【发布时间】:2015-02-18 18:04:31
【问题描述】:
我目前有两个项目的解决方案设置:
MySolution
- MyClassLibrary
- MyClassLibrary.Tests
MyClassLibrary 项目作为 NuGet 包分发。 Tests 项目包含我目前未随 NuGet 包分发的所有单元测试。
问题是在 MyClassLibrary 内部,我的一个类接受 IMyRepository 作为构造函数参数(以允许依赖注入)。然后我在名为 IMyRepositoryTests 的 MyClassLibrary.Tests 项目中设置了一个抽象测试类。目的是当您编写自己的 IMyRepository 实现时,您可以编写一个简单地从 IMyRepositoryTests 继承的测试类,并传入一个具体类的实例,所有测试都会为您完成。
所以结构看起来像这样:
Solution
- MyClassLibrary
-- MyServiceClass(IMyRepository repository)
-- IMyRepository
- MyClassLibrary.Tests
-- MySericeClassTests
-- IMyRepostoryTests (abstract)
问题是 Tests 项目没有随 NuGet 包一起分发,因此如果有人想要对他们的 IMyRepository 的具体实现进行单元测试,他们将不得不编写自己的所有测试,而 (1) 不会采用我已经为他们编写的测试代码的优势和 (2) 可能不符合我为 IMyRepository 设计的规范。
如果我将 IMyRepositoryTests 移至 MyClassLibrary 项目,那么该项目将依赖于我的单元测试框架(Xunit 和 Moq)。这为不进行单元测试的人增加了不必要的依赖。
如果我将测试项目与 NuGet 包一起发布,那么我会创建相同的问题,而且将 NuGet 包与他们的单元测试一起发布似乎不是标准做法。
我可以将测试项目作为单独的 NuGet 包发布,但这似乎也很奇怪。
我还缺少其他选项吗?
【问题讨论】:
-
为什么“将项目作为单独的 NuGet 包进行测试,但 这看起来很奇怪”?对我来说看起来是个不错的选择——我会在需要的地方添加常规包,并测试一个特定于我的框架的包(比如
Feature.Test.MSTest或 Feature.Tests.XUnit` 来测试......)。我错过了什么吗? -
我绝对认为这是我提到的 3 个中的最佳选择,但我想尽可能避免维护单独的包。特别是因为这是一个内部 NuGet 包,不会在我的公司之外共享(因此可以合理地期望我们将在 Xunit/Moq 上标准化我们的单元测试框架)。我只是希望可能有一些我没有想到的其他选择或想法。
标签: c# .net visual-studio unit-testing nuget