3

私はユニットテストに不慣れで、NUnitを試してみたかったのです。

ASP.NET Webプロジェクトでは、単体テスト用にWebプロジェクトソリューションで新しいプロジェクトを作成し、元のプロジェクトへの参照を追加できます。NUnitでは、単体テストプロジェクトのdllファイルを読み込んでテストを実行できます。

ただし、ASP.NET Webサイトを開発していますが、ASP.NET Webサイトにdllファイルがないため、Webサイトプロジェクトを参照する別のプロジェクトをソリューションに追加できず、クラスにアクセスできませんでした。テストするメインプロジェクトで。メインのWebサイトプロジェクトにテストを残すことにした場合でも、NUnit GuiにWebサイトのdllを直接ロードすることはできません(dllファイルがないため)。

Visual Studioを使用して自分のWebサイトの単体テストを作成しようとすると、問題が発生します。それらが関連しているかどうかはわかりません。

どんな助けでも感謝されるでしょう。

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

Web サイト プロジェクトへの参照を提供するには、

参照を追加->プロジェクト->プロジェクトを追加。

于 2010-09-23T13:14:27.037 に答える