如何在ASP.NET网站(非Web项目)中使用NUnit?

时间:2010-03-03 11:39:52

标签: asp.net web nunit webforms webproject

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

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

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

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

任何帮助都会被贬低。

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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>

答案 2 :(得分:-1)

您可以通过

提供对您网站项目的引用
  

添加reference-&gt; projects-&gt;添加项目。