Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.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#单元测试的依赖性_C#_Unit Testing_Visual Studio 2012 - Fatal编程技术网

管理对c#单元测试的依赖性

管理对c#单元测试的依赖性,c#,unit-testing,visual-studio-2012,C#,Unit Testing,Visual Studio 2012,我开始使用VisualStudio进行一些单元测试(不是TDD,现在只是编写一些测试),在错误地探索我的测试项目后,我脑海中出现了一个奇怪的问题 首先,我创建了一个WebAPI2项目,创建了我的模型、控制器和其他东西。我已经分离了我的存储库,配置了依赖注入,项目已经完全正常运行 之后,我创建了我的单元测试项目,添加了对前一个webapi项目的引用,为我的存储库创建了一个mock,实例化了我的控制器,将mock作为构造函数注入传递,调用了该方法并断言了结果。代码是功能性的,但当我编译时,它抱怨无法

我开始使用VisualStudio进行一些单元测试(不是TDD,现在只是编写一些测试),在错误地探索我的测试项目后,我脑海中出现了一个奇怪的问题

首先,我创建了一个WebAPI2项目,创建了我的模型、控制器和其他东西。我已经分离了我的存储库,配置了依赖注入,项目已经完全正常运行

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

这些尝试是:

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

  • 第二件事起作用了,但很难看。再次进入“添加引用”上下文菜单,从Web Api项目浏览目录,选择bin文件夹并选择所有DLL。这很有效,但很糟糕,因为一旦我对该测试进行了版本转换,它将被破坏,因为它引用的路径可能在签出计算机上不可用

  • 第三次尝试是从Web Api项目复制package.json并粘贴到单元测试项目上,然后在NuGet控制台“更新包-重新安装”上运行。第三种选择有效,但我不知道这是否是正确的方法

TL;博士

你们如何在单元测试项目中引用所有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项目时,默认情况下我具有所有这些依赖项:

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


因此,我必须在单元测试项目中手动引用Web Api项目到单元测试的所有依赖项都能正常工作,或者有一些更智能的方法可以做到这一点?

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

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


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

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

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


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

当您执行nuget安装时,请单击您的解决方案并点击此解决方案的manage nuget packages,然后始终确保您同时安装Web项目和测试项目。我不确定我是否理解底线问题。“怎么做”?在Visual Studio中选择“添加引用…”,或者在谈论软件包时使用NuGet。当您进行NuGet安装时,请单击您的解决方案并点击“管理此解决方案的NuGet软件包”,然后始终确保您同时安装Web项目和测试项目。我不确定是否理解底线问题。“怎么做”?在VisualStudio中选择“AddReference…”,或者在谈论包时使用NuGet。问题是,我的所有初始依赖项都是在启动新的WebAPI项目时创建的。我没有任何额外的依赖项可以通过NuGet安装,因为在创建项目时,所有必要的DLL都已经存在。然后,您需要使用“添加引用…”手动添加它们,或者求助于编辑csproj文件。问题是,我所有的初始依赖项都是在启动新的Web Api项目时创建的。我没有任何额外的依赖项可以通过NuGet安装,因为在创建项目时,所有必需的DLL都已经存在。然后,您需要使用“添加引用…”手动添加它们,或者求助于编辑csproj文件。