【问题标题】:Managing dependencies on c# Unit Test管理对 c# 单元测试的依赖项
【发布时间】:2015-10-30 11:11:12
【问题描述】:

我开始使用 Visual Studio 使用单元测试(不是 TDD,目前只是编写一些测试)进行一些测试,在我的测试项目中发现一个错误后,我想到了一个奇怪的问题。

首先,我创建了一个 Web Api 2 项目,创建了我的模型、控制器和其他东西。我已经分离了我的存储库,配置了依赖注入并且项目功能齐全。

之后,我创建了我的单元测试项目,添加了对先前 Web Api 项目的引用,为我的存储库创建了一个模拟,实例化我的控制器,将模拟作为构造函数注入传递,调用方法并断言结果。该代码可以正常工作,但是当我编译时,它抱怨无法从 System.Web.Http 找到 ApiController。

尝试是:

  • 我尝试的第一件事是在“添加引用”上下文菜单中搜索依赖项。我添加了,但版本不同,所以无法正常工作。

  • 第二件事有效,但非常难看。再次进入“添加引用”上下文菜单,从 Web Api 项目浏览目录并选择 bin 文件夹并选择所有 dll。这行得通,但很糟糕,因为一旦我对该测试进行版本化,就会因为引用结帐计算机上可能不可用的路径而被破坏。

  • 第三次尝试是从 Web Api 项目中复制 package.json 并粘贴到单元测试项目中,然后在 NuGet 控制台“Update-Packages -Reinstall”上运行。第三个选项有效,但我不知道这样做是否正确。

TL;DR;

你们如何引用单元测试项目中的所有 DLL 依赖项?

已编辑:

我从编译器得到的错误是:

Error   1   The type 'System.Web.Http.ApiController' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Web.Http, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.   C:\Users\fgadotti\Documents\Prototype\WeWorkout\WeWorkout\AnotherTest\UnitTest1.cs  13  13  AnotherTest

当我创建一个新的 Web Api 项目时,默认情况下我拥有所有这些依赖项: Dependencies from a fresh Web Api project

当我创建一个全新的单元测试项目时,我只有下图的前两个依赖项,第三个依赖项来自我的 Web Api 项目: Dependencies from a Unit Test project

那么,我必须在单元测试项目中手动引用 Web Api 项目的所有依赖项才能使单元测试正常工作,还是有一些更聪明的方法可以做到这一点?

【问题讨论】:

  • 当您执行 nuget 安装时,单击您的解决方案并点击管理此解决方案的 nuget 包,然后始终确保您为 Web 项目和测试项目安装
  • 我不确定我是否理解底线问题。 “如何”?好吧,在 Visual Studio 中选择“添加引用...”,或者如果您正在谈论包,则使用 NuGet。

标签: c# unit-testing visual-studio-2012


【解决方案1】:

我很想知道是否有更智能的替代方案,但是是的,通常我所做的只是将正确的依赖项手动添加到测试项目中。

请注意,对于 NuGet,您可以在解决方案级别轻松管理包,并确保将它们添加到两个项目中。

我从来没有觉得有必要(无论如何,您的项目需要尽可能少的依赖项),但是如果您想要手动但稍微更有效的方法是打开两个 csproj 文件并以这种方式同步引用.

【讨论】:

  • 问题是我所有的初始依赖项都是在我开始一个新的 Web Api 项目时创建的。我没有任何额外的依赖项可以通过 NuGet 安装,因为在创建项目时,所有必要的 DLL 都已经存在。
  • 然后您需要使用“添加参考...”手动添加它们,或者求助于编辑 csproj 文件,AFAIK。
猜你喜欢
  • 2015-04-27
  • 2014-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-29
相关资源
最近更新 更多