Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单元测试ASP.Net Web应用程序的应用程序代码_C#_Asp.net_.net_Unit Testing - Fatal编程技术网

C# 单元测试ASP.Net Web应用程序的应用程序代码

C# 单元测试ASP.Net Web应用程序的应用程序代码,c#,asp.net,.net,unit-testing,C#,Asp.net,.net,Unit Testing,我想创建一个ASP.NETWeb应用程序,并为其编写单元测试。但是我的单元测试项目在我的web应用程序的App_代码目录中看不到任何类型 复制步骤 (如果您已经知道如何创建默认webforms web应用程序并添加应用程序代码文件夹,请跳过图像) 打开VisualStudio。选择文件->新建->项目。 选择Templates->Visual C->Web。选择ASP.NETWeb应用程序。选择“确定” 选择“网络表单”。选中“添加单元测试”。单击“确定” 在解决方案资源管理器中,右键单击w

我想创建一个ASP.NETWeb应用程序,并为其编写单元测试。但是我的单元测试项目在我的web应用程序的App_代码目录中看不到任何类型

复制步骤 (如果您已经知道如何创建默认webforms web应用程序并添加应用程序代码文件夹,请跳过图像)

打开VisualStudio。选择文件->新建->项目。
选择Templates->Visual C->Web。选择ASP.NETWeb应用程序。选择“确定”

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

在解决方案资源管理器中,右键单击web应用程序并选择“添加->添加ASP.Net文件夹->应用程序代码”

在App_代码中添加一个名为“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();
            }
        }
    }
}
然后构建项目

预期行为: 解决方案应该建立起来。如果我们尝试测试,测试应该会成功

实际行为: 解决方案无法生成
命名空间“WebApplication1”中不存在类型或命名空间名称“App\u code”(是否缺少程序集引用?

其他注释 我看了一下,但我认为这个问题并不完全符合我的情况,因为他们正在测试一个网站,而我正在测试一个web应用程序。一些答案特别建议切换到web应用程序,这意味着它不再是一个问题:

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

我要么将这个逻辑转移到它自己的类库项目中,要么按照Fredrik和Colin的建议,将项目类型更改为Web应用程序

正如OP所说的,也可以转移到一个Web应用程序项目中,我认为这个项目也更干净

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


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

因此,为了更清楚一点<代码>应用程序代码文件夹在asp.net项目中具有特殊意义。您可以将文件放在那里,asp.net将在运行时编译它们,并监视它们的更改,以便在发生更改时动态重新编译。细节不是很相关,主要是:如果你不需要这个功能-不要使用
App\u code
文件夹


然而,文件夹本身并没有什么神奇之处。当您通过“添加ASP.NET文件夹”(或仅在网站项目中手动)创建它时,Visual Studio会将您在其中添加的文件的生成操作设置为
内容
,即使对于代码文件也是如此。这样的文件不会被编译成最终的程序集,这就是为什么您不能从单元测试项目中使用它们,也不能从网站代码本身中使用它们。如果手动将生成操作更改为编译,则将编译该操作,并可照常使用。这就是所有的区别。

您是否在单元测试项目中添加了对web项目的引用?web应用程序中不需要App_代码目录。这是用于网站项目的。App_代码是一个特殊文件夹,它不会在程序集中编译,而是在运行时由asp.net编译。所以您不能从单元测试中引用它,实际上您甚至不能从web应用程序集(例如,从global.asax)中使用它。所以-除非你知道自己在做什么和为什么,否则不要把任何东西放在那个文件夹中。@Juan,我试过了,但是web应用程序在“添加引用”窗口的“项目”面板中不可见,而且AFAIK web应用程序不编译为DLL,所以我不能使用“浏览”添加引用面板。如果要将App_代码文件作为常规文件使用,而不使用它们的预期用途(asp.net运行时编译)-只需右键单击App_代码下的Util.cs文件,选择属性并将生成操作从“内容”更改为“编译”。然后您将能够在任何地方引用它,包括单元测试。这个文件夹名称并没有什么神奇之处。我相信这准确地回答了我提出的问题。我发现,如果我将
util.cs
文件移动到项目中的任何其他位置,那么我就可以正确地对其进行单元测试。在我没有在这里分享的非mcve项目中,我仍然看到一些奇怪的行为,但我怀疑这是一个不相关的问题,应该单独发表一篇文章。此特定问题的案例已结束。请注意,您可以将其移动或更改生成操作以进行编译,使其按预期工作。即使您使用的是Web表单,您也只需要在创建网站(而不是Web应用程序)时使用App_代码。甚至可以创建一个MVC网站,将所有控制器等放入App_代码中。“所以它和Web表单没有什么特别的关系。”梅森说得对,我把它删除了。虽然我甚至只看到在旧的web表单项目中使用了它,但在mvc项目中从未使用过。@Evk如果您移动它,并且它没有设置为编译,那么您需要将它设置为编译。因此,真正的解决方案是“将其设置为编译,最好不要将其放在App_代码中,以避免混淆”。是的,我在学习MVC的时候试着把它放在一个网站项目而不是web应用程序中。我不建议你试一下。