Как я могу использовать NUnit с веб-сайтом ASP.NET (не веб-проектом)? - PullRequest
3 голосов
/ 03 марта 2010

Я новичок в модульном тестировании и хотел попробовать NUnit.

В веб-проекте ASP.NET я могу создать новый проект в своем решении для веб-проекта для модульного тестирования и добавить ссылку на свой исходный проект, а в NUnit я могу загрузить файл dll для моего проекта модульного тестирования, чтобы запустить тесты.

Однако я занимаюсь разработкой веб-сайта ASP.NET и, поскольку на веб-сайте ASP.NET нет файла DLL, я не могу добавить отдельный проект в свое решение, которое ссылается на проект моего веб-сайта, и, следовательно, я не смог чтобы получить доступ к классам в основном проекте для тестирования. Даже если я решил оставить свои тесты в своем проекте основного веб-сайта, я не могу напрямую загрузить dll для веб-сайта в NUnit Gui (потому что нет никакого файла dll).

Я также сталкиваюсь с проблемой, когда пытаюсь создать модульные тесты для своего веб-сайта с помощью Visual Studio, не знаю, связаны ли они.

Любая помощь будет оценена.

Ответы [ 3 ]

4 голосов
/ 03 марта 2010

Почему вы не можете переключиться на проект веб-приложения? Или вы можете переместить свою бизнес-логику во внешний проект библиотеки классов, а затем сослаться на последний в своем тестовом проекте Nunit.

2 голосов
/ 01 июня 2012

Да, это возможно. Хитрость не в том, чтобы использовать 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>
0 голосов
/ 23 сентября 2010

Вы можете предоставить ссылку на ваш сайт проекта по

добавить ссылку-> проекты-> добавить проект.

...