【问题标题】:How to use NUnit GUI with a C#/ASP.NET website?如何在 C#/ASP.NET 网站上使用 NUnit GUI?
【发布时间】:2010-05-26 03:47:13
【问题描述】:

我有一个 C#/ASP.NET 网站,在 App_Code 目录中有一些代码 (*.cs) 文件。我想使用 NUnit 测试它们。我编写了一个带有正确 [TestFixture] 和 [Test] 注释的测试文件,并将其放在这里:App_Code/Test/TestClassName.cs。

我加载了 NUnit GUI 来运行它,但它要我选择一个 .exe 或 .dll 文件。我的项目的 bin 文件夹中没有。我的项目确实成功运行并构建了所有内容,但仍然没有 exe 或 dll 文件。如何让 NUnit Gui 只在该类中运行测试?

【问题讨论】:

    标签: c# nunit


    【解决方案1】:

    我不建议将测试代码放在您将要部署到生产环境的同一包中。

    您可能希望将测试类移动到库项目中,例如 Business.UnitTest(可能有一种内置方法可以创建一个 nUnit 特定项目,如果有,请使用它)。然后将 App_Code 目录中的业务类移动到另一个名为 Business 的项目中。让 Business.UnitTest 引用业务库。那应该让 nUnit 运行(我不相信 nUnit 会针对网站运行,只针对库,但我不是 100% 确定)。

    为您的网站添加对您刚刚创建的业务库的引用,以便您的生产代码可以访问业务库中的业务对象。您可能需要解决一些命名空间问题,但这应该不会太糟糕。

    【讨论】:

    • 这听起来像是一个很好的解决方案,但是当我将代码从 App_Code 移动到类库时,它无法再访问 HttpContext.Current。我有很多错误日志记录会自动从该对象中提取相关信息。没有它,我需要为每个方法添加几个额外的输入参数,并提取此信息,或者我需要将 try/catch 放在类库之外并让异常冒泡到那里。这两种选择似乎都是不必要的重复和普遍的丑陋。是否有解决方法或者人们只是不经常使用或记录网络状态?
    • 我不知道人们多久记录一次网络状态,尝试从 HttpContext.Current 获取信息并将其作为变量传递,如您所提到的(您可以在库中的对象中设置它们的属性)。如果您真的不喜欢传递额外的变量,请尝试将 HttpContext.Current 本身作为参数传递(虽然我不太喜欢这种方法,耦合不好),只需在顶部添加一个 using System.Web页面(确保库中有对程序集的引用)。
    【解决方案2】:

    .NET 网站项目的技巧是代码文件通常不会预先编译,它们是在执行相应页面时编译的。这对测试提出了挑战,因为正如您提到的,NUnit 想要运行 .exe.dll 进行测试。

    解决此问题的一种方法是将网站项目转换为网络应用程序;它们听起来相似,但工作方式不同。与不需要预先编译的网站相比,Web 应用程序需要它。因此,您将拥有一个或多个编译为程序集 (.dll) 或可执行文件 (.exe) 的项目。然后 NUnit 可以连接到那些来运行测试。

    要完成这项工作,您需要将可测试代码分离到另一个项目中;您的前端 Web 应用程序可以参考这个其他项目以使用其中的代码。理想情况下,前端将是一层薄薄的逻辑和用户交互,而真正的工作可以发送到第二个项目。因此,您将要测试第二个项目。

    您需要多一个项目来包含测试 - 一般的看法是不要将您的测试与正在测试的代码放在同一个项目中。这个项目指的是被测试的项目,以及 NUnit,并包含测试本身。这个程序集是您将指示 NUnit 运行以进行测试的程序。

    【讨论】:

      【解决方案3】:
      1. 首先,您想为您的测试创建一个新项目。如果你碰巧有任何内部类或属性,你应该使用InternalsVisibleToAttribute 以便能够在你的测试项目中,在你的“真实”项目之外测试这些。 此属性适用于整个程序集,因此我建议将其放入“真实”程序集的 Assembly.info 文件中。

      2. 在您的测试项目中,添加对“真实”程序集的引用。

      3. 确保准确知道二进制文件 (assembly.dll) 的路径;

      4. 在 NUnit GUI 中打开 TestsProjectAssembly.dll,确保浏览到正确的文件夹;

      5. 您可能还希望 NUnit GUI 在每次运行测试时重新加载您的程序集(在选项属性中有一个这样做的选项);

      6. 运行您的测试。

      绝对确保您的路径或可浏览文件夹是生成测试项目的路径。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-05-12
        • 2018-08-14
        • 1970-01-01
        • 2011-02-11
        • 2023-03-15
        • 2018-08-18
        • 1970-01-01
        相关资源
        最近更新 更多