3

我是单元测试的新手,我想尝试一下 NUnit。

在 ASP.NET Web 项目中,我可以在我的 Web 项目解决方案中创建一个新项目以进行单元测试,并添加对我的原始项目的引用,在 NUnit 中,我可以为我的单元测试项目加载 dll 文件以运行测试。

但是,我正在开发一个 ASP.NET 网站,并且因为 ASP.NET 网站没有 dll 文件,我无法在我的解决方案中添加一个引用我的网站项目的单独项目,因此我无法访问类在主项目中进行测试。即使我决定将测试留在我的主网站项目中,我也无法直接在 NUnit Gui 中加载网站的 dll(因为没有任何 dll 文件)。

当我尝试使用 Visual Studio 为我的网站创建单元测试时,我也遇到了一个问题,不知道它们是否相关。

任何帮助将不胜感激。

4

3 回答 3

4

为什么不能改用 Web 应用程序项目?或者,您可以将业务逻辑移至外部类库项目,然后在 Nunit 测试项目中引用后者。

于 2010-03-03T11:43:05.593 回答
2

对的,这是可能的。诀窍是不要使用 NUnit GUI Runner,而是有一个自定义的 ASP.net 测试页面。这是使用 Razor 的示例。以下进入 App_Code\MyRunner.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Core;
using NUnit.Framework;
using NUnit.Core.Extensibility;

/// <summary>
/// Summary description for TestRunner
/// </summary>
public class MyRunner
{
    public static IList<TestResult> Run(Type testCase)
    {
        NUnit.Core.CoreExtensions.Host.InitializeService();
        TestExecutionContext.CurrentContext.TestPackage = new TestPackage(testCase.FullName);
        MyListener listener = new MyListener();
        if (TestFixtureBuilder.CanBuildFrom(testCase))
        {
            NUnit.Core.Test test = TestFixtureBuilder.BuildFrom(testCase);
            test.Run(listener, NUnit.Core.TestFilter.Empty);
        }
        return listener.Results;
    }
}

public class MyListener : EventListener
{

    public IList<TestResult> Results { get { return _results; } }

    public void RunFinished(Exception exception)
    {

    }

    public void RunFinished(TestResult result)
    {

    }

    public void RunStarted(string name, int testCount)
    {

    }

    public void SuiteFinished(TestResult result)
    {
    }

    public void SuiteStarted(TestName testName)
    {

    }

    IList<TestResult> _results = new List<TestResult>();
    public void TestFinished(TestResult result)
    {
        _results.Add(result);
    }

    public void TestOutput(TestOutput testOutput)
    {

    }

    public void TestStarted(TestName testName)
    {

    }

    public void UnhandledException(Exception exception)
    {

    }
}

public class Class1
{
    [Test]
    public void TestOnePlusOne()
    {
        Assert.AreEqual(1 + 1, 2);
    }

    [Test]
    public void TestOnePlusTwo()
    {
        throw new Exception("Ooops");
    }
}

这是一个与之配套的 CSHTML 页面。将其命名为 MyNUnit.cshtml:

@using NUnit.Core
@{
    IList<TestResult> results = MyRunner.Run(typeof(Class1));
}
<!DOCTYPE html>
<html>
<head>
    <title></title>
</head>
<body>
    <table>
        @foreach (TestResult result in results)
        {
            <tr>
                <td>
                    @result.Name
                </td>
                <td>
                    @result.IsSuccess
                </td>
                <td>
                    @result.Message
                </td>
            </tr>
        }
    </table>
</body>
</html>
于 2012-06-01T02:53:18.777 回答
-1

您可以通过以下方式为您的网站项目提供参考

添加参考->项目->添加项目。

于 2010-09-23T13:14:27.037 回答