在 NuGet 包中测试代码的更好方法

Better approach to testing code in NuGet packages

我们有一组项目正在打包。这些 projects/packages 之间有一个依赖关系图。在基本术语中,我们有 Common、Client 和 Server(实际情况要复杂一些,总共涉及 5 个项目)。我确实有这些的单元测试项目。

Common 由客户端和服务器使用。服务器使用客户端。我称这些为“IFX”。 它们都用于各种projects/services。有问题的服务以 ServiceFabric 为目标——并不完全相关,只是说当事情变得不稳定时,它会为 testing/debugging 添加一个额外的障碍,因此反馈循环会更长。

我的典型流程是更改 IFX 库,运行 一系列构建、打包等。运行 通用 build/package,更新客户端项目,提交,build/package,然后执行服务器等。服务器 IFX 引用通用和客户端的包(不仅仅是项目引用),因此对通用的更改会导致客户端的新构建,然后是服务器,最后是任何需要新版本的服务。

我的主要问题是测试这些。为了加快 dev/test(并更好地希望事情 在完成所有打包仪式之前工作 ),我希望获得更多实时反馈。我考虑过创建单独的项目来执行项目(而不是包)引用,并构建一个引用项目(而不是包)的测试服务,只是为了早期反馈,在我提交 REPO 并开始构建可能不起作用的东西之前。但是,由于命名空间冲突等原因,这变得很棘手。特别是,考虑到 IFX 本身有包,而不是项目引用。

在这一点上,我真正想知道的是,还有谁 运行 关注这个问题,您做了什么来减轻痛苦?我知道在核心库稳定之前打包问题 - 同意,但这里的情况无法真正改变,所以,我有包要应对。

我在测试某些东西时已经研究过替换包文件夹中的 dll 的方法,但是当我忘记我覆盖了哪些 dll 时,这真的很成问题,所以我想要一些更静态和自动的东西,不手动移动 dll。

我会在不停地嗡嗡作响之前停下来问问 - 有什么缓解这种痛苦的建议吗? :)

根据@CamiloTerevinto 的评论,您可以:

  • 在相关库之间使用项目引用,而不是包引用(应用程序和不相关的库仍然可以包引用它们)
  • 更改代码、构建和测试
  • 一旦您的测试通过,运行 一个包含所有相关库的解决方案 dotnet pack(此时项目引用会自动转换为包引用)并发布您的新包版本

为避免最终生成具有相同版本的不同包的情况,您可能希望使用 https://github.com/dotnet/Nerdbank.GitVersioning 之类的东西来为所有包获取确定性版本。