unit testingASP.Net Web应用程序的App_Code

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

重现步骤

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

打开Visual Studio。 选择File-> New-> Project。
选择模板 – > Visual C# – > Web。 选择ASP.Net Web应用程序。 选择“确定”。

在此处输入图像描述

选择“Web窗体”。 选中“添加unit testing”。 单击确定。

在此处输入图像描述

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

在此处输入图像描述 在此处输入图像描述

将新项添加到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; } } } 

在unit testing项目中,将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?)

其他说明

我查看了存储在App_Code中的unit testingASP.net网站项目代码 ,但我不认为问题与我的情况完全匹配,因为他们正在测试一个网站而我正在测试一个Web应用程序。 一些答案特别建议切换到Web应用程序,这意味着它将不再是一个问题:

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

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

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

“尝试使用Web应用程序”的建议不适用于我,因为我已经在使用Web应用程序,但它仍然无效。

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

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

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