【问题标题】:unit testing umbraco 7.12 controller单元测试 umbraco 7.12 控制器
【发布时间】:2018-10-01 14:02:51
【问题描述】:

我已经为我的 umbraco 7.12 安装设置了一个单元测试项目,其中安装了 Our.Umbraco.Community.Tests nuget 以及 nunit、nunit 3 测试适配器和 NUnitV2Driver。我有一个单元测试,我从 BaseRoutingTest(来自 umbraco 社区测试 nuget)继承了 nunit 似乎不想运行:

using System;
using System.Globalization;
using System.Web.Routing;
using System.Web.Security;
using Moq;
using NUnit.Framework;
using Umbraco.Core;
using Umbraco.Core.Configuration;
using Umbraco.Core.Dictionary;
using Umbraco.Core.Logging;
using Umbraco.Core.Models;
using Umbraco.Core.Profiling;
using Umbraco.Tests.TestHelpers;
using Umbraco.Web;
using Umbraco.Web.Mvc;
using Umbraco.Web.Security;
using umbraco7._12test.Models;
using Assert = NUnit.Framework.Assert;

namespace UnitTestProject1
{
    [TestFixture]
    public class UnitTest1:BaseRoutingTest
    {
        protected UmbracoContext UmbracoContext { get; set; }
    protected UmbracoHelper UmbracoHelper { get; set; }

    protected IPublishedContent Content { get; set; }

    protected RouteData RouteData { get; set; }

    [SetUp]
    public override void Initialize()
    {

        base.Initialize();

        SettingsForTests.ConfigureSettings(SettingsForTests.GenerateMockSettings());

        this.RouteData = new RouteData();
        var routingContext = this.GetRoutingContext(
            "http://localhost",
            -1,
            this.RouteData,
            true,
            UmbracoConfig.For.UmbracoSettings());

        this.UmbracoContext = routingContext.UmbracoContext;

        this.Content = Mock.Of<IPublishedContent>();


        this.UmbracoContext.PublishedContentRequest = new Umbraco.Web.Routing.PublishedContentRequest(
            new Uri("http://localhost"),
            routingContext,
            UmbracoConfig.For.UmbracoSettings().WebRouting,
            s => new string[0])
        {
            PublishedContent = this.Content,
            Culture = new CultureInfo("en-GB")
        };


        var routeDefinition = new RouteDefinition
        {
            PublishedContentRequest = this.UmbracoContext.PublishedContentRequest
        };

        this.RouteData.DataTokens.Add(Constants.Web.UmbracoRouteDefinitionDataToken, routeDefinition);

        this.UmbracoHelper = new UmbracoHelper(
          this.UmbracoContext,
          this.Content,
          Mock.Of<ITypedPublishedContentQuery>(),
          Mock.Of<IDynamicPublishedContentQuery>(),
          Mock.Of<ITagQuery>(),
          this.ApplicationContext.Services.DataTypeService,
          this.UmbracoContext.UrlProvider,
          new Mock<ICultureDictionary>().Object,
          Mock.Of<IUmbracoComponentRenderer>(),
          new MembershipHelper(this.UmbracoContext, Mock.Of<MembershipProvider>(), Mock.Of<RoleProvider>()));
    }

    [TearDown]
    public override void TearDown()
    {

        this.UmbracoHelper = null;
        this.UmbracoContext = null;
        this.Content = null;


        base.TearDown();
    }

    [Test]
    public void TestMethod1()
    {
        var apiController = new 
            umbraco7._12test.Controllers.ApiController(this.UmbracoContext,this.UmbracoHelper);
        var result = apiController.EditContact();
        var model = (ContactModel)result.Model;

        NUnit.Framework.Assert.IsNotNull(model.FirstName);
        NUnit.Framework.Assert.IsNotNull(model.LastName);
    }

    [Test]
    public void TestMethod2() {
        Assert.AreEqual(1,1);
    }
}
}

一旦我从 BaseRoutingTest 继承,nunit 将不再运行我的测试,没有错误只是一条消息说没有找到测试 -

[01/10/2018 14:56:32 Informational] NUnit couldn't find any tests in C:\project\umbraco7.12test\UnitTestProject1\bin\Debug\UnitTestProject1.dll
[01/10/2018 14:56:32 Informational] NUnit Adapter 3.10.0.21: Test execution complete
[01/10/2018 14:56:32 Warning] No test matches the given testcase filter `FullyQualifiedName=UnitTestProject1.UnitTest1.TestMethod1` in C:\project\umbraco7.12test\UnitTestProject1\bin\Debug\UnitTestProject1.dll

如果我不从 BaseRoutingTest 继承,nunit 将再次运行测试。我需要从 BaseRoutingTest 继承,以设置 UmbracoContext 和其他需要模拟的东西。 有人知道问题出在哪里吗?

【问题讨论】:

    标签: unit-testing nunit umbraco umbraco7


    【解决方案1】:

    我不知道 Umbraco,所以我只从 NUnit 的角度回答这个问题......

    您正在尝试使用 NUnit 3 测试适配器来运行 NUnit V2 测试。您已安装 V2 驱动程序以使 NUnit 3 运行 NUnit V2 测试。对吧?

    问题是,NUnit 3 测试适配器不支持使用扩展。即使这样做了,您也必须手动将这些扩展名复制到适配器的位置,并且可能还需要手动编辑 .addins 文件以使其正常工作。

    使用原始的 NUnit 测试适配器要简单得多,它与 V2 一起使用。

    【讨论】:

    • 我刚刚尝试过,但没有运气。谢谢你的建议,查理
    • 你的意思是尝试使用原始的 NUnit V2 适配器?该代码已经稳定了很长时间,所以我很惊讶。
    • 是的,我尝试了原始的 nunit v2 适配器。这一定与我的设置有关....
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 2017-06-26
    • 2011-12-01
    • 2014-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多