我想创建一个 ASP.Net Web 应用程序,并且想为其编写单元测试。但我的单元测试项目看不到我的 Web 应用程序的 App_Code 目录中的任何类型。
重现步骤
(如果您已经知道如何创建默认的 Webforms Web 应用程序并添加 app_code 文件夹,请跳过图像)
打开视觉工作室。选择文件->新建->项目。
选择“模板”->“Visual C#”->“Web”。选择 ASP.Net Web 应用程序。选择“确定”。
选择“网络表单”。选中“添加单元测试”。单击“确定”。
在解决方案资源管理器中,右键单击 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;
}
}
}
在单元测试项目中,将 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?)
其他注意事项
我在看单元测试 ASP.net 网站项目代码存储在 App_Code 中 https://stackoverflow.com/q/1198555/953482,但我不认为这个问题完全符合我的情况,因为他们正在测试一个网站,而我正在测试一个网络应用程序。一些答案特别建议切换到网络应用程序,这意味着这将不再是问题:
但是,如果您可以选择将代码分离为二进制文件(类库)或仅使用网络应用程序,我建议作为更好的选择。
我要么将此逻辑移至其自己的类库项目中,要么将项目类型更改为Web应用程序正如 Fredrik 和 Colin 所建议的那样。
正如OP所说,也有可能移动到Web应用程序项目,我想说这也更干净
“尝试使用网络应用程序”的建议不适用于我,因为我already使用网络应用程序,但它仍然不起作用。
答案还建议“尝试将代码移至其自己的项目中”,我确实希望这会起作用,但在我的实际解决方案中,我在 App_Code 目录中有数十个文件。在首先建立测试框架之前,我不想执行任何严重的结构更改。