在VS2010中使用MSTest测试运行错误

时间:2010-05-03 22:17:02

标签: c# asp.net-mvc unit-testing visual-studio-2010 mstest

当我运行我的单元测试时,所有测试都通过,但不是“测试运行成功”或任何成功消息,我在小栏中得到“测试运行错误”,告诉我有多少测试通过,即使我的所有考试都通过了。

当我点击文字时,我被带到一个页面,告诉我发生了以下两件事:

  

警告:测试运行部署期间发生冲突:测试容器[...] \ Booking.Web.Tests.dll直接或间接引用的部署项'[...] \ Booking.Web.dll'无法部署到'Booking.Web.dll',因为否则文件'[...] \ Booking.Web.dll'会直接或间接引用'[。]引用部署项'[...] \ Booking.Web.dll'。 .. \ Booking.Web.Tests.dll'

     

错误:无法初始化ASP.NET项目'Booking.Web'   抛出异常:网站无法正确配置;获取ASP.NET进程信息失败。请求“http://localhost:54131/VSEnterpriseHelper.axd”返回错误:远程服务器返回错误:(500)内部服务器错误。

我不明白它抱怨的一半。我如何摆脱这些错误?

(以供参考:Booking.Web是一个ASP.NET MVC 2项目,Booking.Web.Tests是一个测试项目,[...]是我环境中项目的完整本地路径,在大多数情况下以上案例到Booking.Web项目内的/ bin / debug /文件夹中)

更新按照说明,我在事件查看器中查找了更多信息。这是我发现的:

  

3008     发生了配置错误     5/8/2010 2:26:15上午     5/8/2010 12:26:15上午     4ffbe9180c3d4c02adb9ac4d61dd0928
    1
    1
    0
    4484bbf4-1-129177519750954331
    全
    /
    d:\ ... \ Booking.Web \
    AASLOEG

     

1876
    WebDev.WebServer40.EXE
    Aasloeg \托马斯
    ConfigurationErrorsException
    无法加载文件或程序集'Ninject.Web.Mvc,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = 79764a4ef1548af1'或其依赖项之一。强名称签名无法验证。程序集可能已被篡改,或者是延迟签名但未使用正确的私钥完全签名。 (来自HRESULT的异常:0x80131045)在   System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName,Boolean starDirective)在

  System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory()在

  System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai)在   System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig)在
  ......荒谬的堆栈痕迹。

2 个答案:

答案 0 :(得分:9)

首先 - 您启用了代码覆盖率。您可以阅读here。所以单元测试没有问题。这是代码覆盖问题。

第二件事 - 这个警告没问题 - 没关系。

第三件事 - 这个错误 - 这是关键问题。

可能存在不同的问题 - 最常见的是你应该引用更多的程序集。要找出究竟应该加载的内容,您必须转到Event Viewer并查看Windows日志 - >应用程序

答案 1 :(得分:6)

我遇到了与MS-Test相关的错误,抱怨DLL可以“覆盖部署项目blah.dll”。

这种情况正在发生,因为我正在为多个DLL一次运行MS-Test,如下所示:

mstest.exe /testcontainer:Tests.web.dll /testcontainer:Tests.svcs.dll /testcontainer:Tests.core.dll

当MS-Test运行时,它尝试从测试中获取所有输出DLL,并将它们放在测试运行的 / Out 目录中。就我而言, Tests.svcs.dll Tests.core.dll 都引用了相同的程序集( Core.dll ),因此尝试过将该DLL复制到同一地点两次(从而导致警告)。

为了解决这个问题,我将每个程序集的测试运行分开,这给每个测试运行它自己的输出DLL的 / Out 文件夹

mstest.exe /testcontainer:Tests.web.dll

mstest.exe /testcontainer:Tests.svcs.dll

mstest.exe /testcontainer:Tests.core.dll