单元测试ASP.Net Web应用程序的App_Code

时间:2017-03-02 16:41:36

标签: c# asp.net .net unit-testing

我想创建一个ASP.Net Web应用程序,我想为它编写单元测试。但我的单元测试项目在我的Web应用程序的App_Code目录中看不到任何类型。

重现的步骤

(如果您已经知道如何创建默认的webforms Web应用程序并添加app_code文件夹,请跳过图像)

打开Visual Studio。选择文件 - >新建 - >项目 选择模板 - > Visual C# - >网页。选择ASP.Net Web应用程序。选择“确定”。

enter image description here

选择“网络表单”。选中“添加单元测试”。单击“确定”。

enter image description here

在解决方案资源管理器中,右键单击Web应用程序,然后选择“添加 - >添加ASP.Net文件夹 - > App_Code”。

enter image description here enter image description here

向App_Code添加一个名为“Util.cs”的新项目。向文件添加一个函数,使内容为:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebApplication1.App_Code
{
    public class Util
    {
        public static int getMeaningOfLife()
        {
            return 42;
        }
    }
}

在单元测试项目中,将UnitTest1.cs更改为:

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace WebApplication1.Tests
{
    [TestClass]
    public class UnitTest1
    {
        [TestMethod]
        public void TestMethod1()
        {
            int result = WebApplication1.App_Code.Util.getMeaningOfLife();
            if (result != 42)
            {
                Assert.Fail();
            }
        }
    }
}

然后建立项目。

预期行为:

解决方案应该构建。如果我们尝试测试,测试应该会成功。

实际行为:

解决方案无法使用The type or namespace name 'App_Code' does not exist in the namespace 'WebApplication1' (are you missing an assembly reference?)

进行构建

其他说明

我看了Unit Testing ASP.net Web Site Project code stored in App_Code,但我不认为问题与我的情况完全一致,因为他们正在测试一个网站而我正在测试一个网络应用程序。一些答案特别建议切换到Web应用程序,这意味着它将不再是一个问题:

  

但是,如果您可以选择将代码分隔为二进制文件(类库)或仅使用Web应用程序,我建议将其作为更好的替代方案。

  

我要么将这个逻辑移到自己的类库项目中,要么将项目类型更改为Web应用程序,就像Fredrik和Colin所说的那样。

  

正如OP所说,也可以转移到Web App项目,我认为它也更干净

“尝试使用网络应用程序”的建议不适用于我,因为我已经使用网络应用程序,但它仍然不起作用。

答案还建议“尝试将代码移到自己的项目中”,我确实希望这样可行,但在我的实际解决方案中,我在App_Code目录中有几十个文件。在我首先建立测试框架之前,我宁愿不进行任何严重的结构更改。

1 个答案:

答案 0 :(得分:2)

所以要带来更多的清晰度。 App_Code文件夹在asp.net项目中具有特殊含义。您可以将文件放在那里,asp.net将在运行时编译它们,并监视它们的更改,以便在发生更改时动态重新编译。细节不是很相关,主要是:如果您不需要此功能,请不要使用App_Code文件夹。

但是,该文件夹本身并没有什么神奇之处。当您通过"添加ASP.NET文件夹"创建它时(或者只是手动在网站项目中) - Visual Studio会将您添加到的文件的构建操作设置为Content,即使对于代码文件也是如此。这些文件不会被编译成生成的程序集,这就是为什么你不能在你的单元测试项目中使用它们,也不能从网站代码本身使用它。如果您手动将构建操作更改为Compile - 它将被编译并可以照常使用。这就完全不同了。