运行Visual Studio ASP.NET单元测试时出错500错误

时间:2008-11-04 00:19:13

标签: visual-studio visual-studio-2008 unit-testing

我的单元测试项目中有以下方法:

    [TestMethod]
    [HostType("ASP.NET")]
    [UrlToTest("http://localhost:3418/Web/SysCoord/ChooseEPA.aspx")]
    [AspNetDevelopmentServerHost("%PathToWebRoot%")]
    public void TestMethod1()
    {
        Page page = TestContext.RequestedPage;
        Assert.IsTrue(false, "Test ran, at least.");
    }

我遇到了这个例外:

测试适配器'WebHostAdapter'在运行测试'TestMethod1'时抛出异常。无法正确配置网站;获取ASP.NET进程信息失败。请求“http://localhost:3418/SysCoord/VSEnterpriseHelper.axd”返回错误:远程服务器返回错误:(404)Not Found。 远程服务器返回错误:(404)Not Found。

页面在网址:http://localhost:3418/Web/SysCoord/ChooseEPA.aspx的浏览器中正常工作。

此物理路径为:C:\ ESI \ HR_Connect2 \ BenefitChangeSystem \ Application_DEV \ Web \ SysCoord。

任何想法都会受到赞赏。

更新1

在本文中,我的web.config文件中添加了以下内容。还使web.config可写并杀死/重新启动开发Web服务器。行为没有变化。

<location path="VSEnterpriseHelper.axd">
    <system.web>
        <authorization>
            <allow users="*"/>
        </authorization>
    </system.web>
</location>

更新2

将AspNetDevelopmentServerHost属性更改为等效于[AspNetDevelopmentServerHost(“%PathToWebRoot%\ solutionfolder \ webfolder”,“/ webfolder”)]解决了404问题。

不幸的是,测试开始返回500错误。进步,但并不多。对一个干净的项目进行试验和错误得出的结论是,对web.config中的自定义类的引用导致了这个问题。

例如:

    <profile enabled="true" defaultProvider="MyProfileProvider">
        <providers>
            <add name="MyProfileProvider" connectionStringName="ProfileConnectionString" applicationName="/MyApp" type="System.Web.Profile.SqlProfileProvider"/>
        </providers>
        <properties>
            <add name="Theme" type="String" defaultValue="Default"/>
            <add name="LastLogon" type="DateTime"/>
            <add name="LastLogonIp" type="String"/>
            <!--
            <add name="EmployeeSearchCriteria" type="MyApplicationFramework.Profile.EmployeeSearchCriteria"/>
            <add name="DocumentSearchCriteria" type="MyApplicationFramework.Profile.DocumentSearchCriteria"/>
            -->
        </properties>
    </profile>

上面的标准类型被注释掉,测试运行正常。如果取消注释,则会返回500错误。

过去任何人都有过类似的问题吗?

12 个答案:

答案 0 :(得分:15)

之前我遇到过这个问题,在阅读了所有关于它的内容之后放弃了这个问题(包括这个帖子)。

在我的案例中,解决方案结果很简单。我所要做的就是不使用ASP.NET测试属性,只是将MVC项目作为DLL进行测试。

第1步

从测试中删除额外的属性。

[TestMethod]
public void TestMethod1()
{
    Page page = TestContext.RequestedPage;
    Assert.IsTrue(false, "Test ran, at least.");
}

第2步

在代码覆盖率中,取消选中MVC项目并手动添加MVC项目的DLL。

alt text

Voila,它可以作为正常的程序集进行检测,没有错误,不会启动开发服务器,也不会使Team Build失败。

答案 1 :(得分:8)

我发现使用vs2010我不仅限于4.0应用程序。但我发现,如果测试Web应用程序并且您使用旧的System.Web.Extensions版本重定向,则可能会出现错误。从 Web.config 文件中删除以下部分修复了我的问题:

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" appliesTo="v2.0.50727">
    <dependentAssembly>
      <assemblyIdentity name="System.Web.Extensions" publicKeyToken="31bf3856ad364e35"/>
      <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
    </dependentAssembly>
    <dependentAssembly>
      <assemblyIdentity name="System.Web.Extensions.Design" publicKeyToken="31bf3856ad364e35"/>
      <bindingRedirect oldVersion="1.0.0.0-1.1.0.0" newVersion="3.5.0.0"/>
    </dependentAssembly>
  </assemblyBinding>
</runtime>
祝你好运。

答案 2 :(得分:2)

我遇到了和你一样的问题,不过我的经历有点不同。

我在vista x64上,我的开发人员使用xp x64 ......他们根本没有任何问题。我刚刚升级,无法为asp.net MVC项目运行任何单元测试。我收到了你收到的同样的500错误。

我关闭了代码覆盖率,一切都神奇地开始工作。

答案 3 :(得分:1)

根据您的证据,我猜想单元测试项目或Web项目中缺少对包含MyApplicationFramework.Profile.EmployeeSearchCriteria的任何程序集的引用 - 尽管我真的认为您只需要在Web中引用项目,但我不了解VS Web服务器在用作单元测试的一部分时的行为。

答案 4 :(得分:1)

我遇到了一个测试Web服务的类似问题,该项目是.NET 3.51。我收到了IIS 500错误。  我删除了由Hal Diggs评论的旧程序集绑定并且它有效。

答案 5 :(得分:1)

在使用Visual Studio 2010对Web应用程序进行单元测试时,我收到了相同的错误消息。唯一的区别是我使用的是IIS,即我省略了[AspNetDevelopmentServerHost("%PathToWebRoot%")]指令。

我怀疑问题在于我使用的是IIS 5.1版本。更多信息:

http://ibsta.blogspot.com/2011/01/unit-testing-fun-under-visual-studio.html

答案 6 :(得分:1)

我设置了一个默认的单元测试,弹出错误,让我来到这里。我刚删除了以下内容(如下)。然后点击调试当前上下文和繁荣,罚款:S。

    [HostType("ASP.NET")]
    [AspNetDevelopmentServerHost("C:\\Inetpub\\....]

答案 7 :(得分:0)

我遇到了与单元测试相同的问题。 并找到问题的原因并解决它。 问题仅在于目录的访问权限。

在我的情况下,我在不同的驱动器(d)上安装了VSTS,然后默认安装。 因此,只为整个目录 \ Program Files \ Microsoft Visual Studio 9.0 提供用户 PCNAME \ ASPNET 的完全访问权限。

我正在使用Windows XP,但如果您使用的是窗口服务器,则为用户 NetworkServices 提供访问权限。

通过这个解决方案,我解决了我的问题。 希望你能从这个答案找到有用的东西。

谢谢, Priyesh Patel

答案 8 :(得分:0)

像这样评论web.config的全部内容

<!-- <location path="VSEnterpriseHelper.axd">
    <system.web>
      <authorization>
        <allow users="?" />
      </authorization>
    </system.web>   </location>   -->

它对我有用

答案 9 :(得分:0)

确保您的Web应用程序针对Framework 4.0。如果你想测试一个 2.0,3.0或3.5项目,您将获得(500)内部服务器错误。

答案 10 :(得分:0)

我遇到了同样的问题。然后我检查了Web项目和单元测试项目的属性。并发现目标框架设置不同。我将项目的目标框架设置为.Net框架4(在我的例子中)。最后再次运行测试方法并且工作正常。

感谢。

答案 11 :(得分:0)

对我而言,Resharper造成了这个问题。一旦我暂停它(工具 - &gt;选项 - &gt; Resharper - &gt;一般 - &gt;暂停)一切正常。 (使用VS2010SP1和Resharper Ultimate 2016.1.2)