ASP.NET Core中的单元测试标签助手-填充标签公共属性

像哈蒙德

尝试在一个新项目上实施最佳实践,我发现我可以将单元测试扩展到MVC Tag Helpers的范围。在这种情况下,我从MVC文档的“标记帮助器”部分中获得了一个非常简单的帮助器,因此现在有了<email mail-to="Support"></email>

实际的代码如下。

public class EmailTagHelper : TagHelper
{
    private const string EmailDomain = "contoso.com";

    public string MailTo { get; set; }

    public override void Process(TagHelperContext ctx, TagHelperOutput output)
    {
        output.TagName = "a";
        var addr = $"{MailTo}@{EmailDomain}";
        output.Attributes.SetAttribute("href", $"mailto:{addr}");
        output.Content.SetContent(addr);
    }
}

生成的HTML符合预期,如果我在运行代码时设置了断点,则可以看到pascal大小写mail-to正确地填充MailTo了C#类中的camel-case

现在,我有以下单元测试:

[TestMethod]        
public void EmailTagHelper_GeneratesExpectedHtml()
{
    var emailHelper = new EmailTagHelper();

    var ctx = new TagHelperContext(new TagHelperAttributeList
    {
        {"mail-to", "Support"}
    }, new Dictionary<object, object>(), Guid.NewGuid().ToString("N"));

    var output = new TagHelperOutput("email",
        new TagHelperAttributeList(), (useCachedResult, htmlEncoder) =>
        {
            var tagHelperContent = new DefaultTagHelperContent();
            tagHelperContent.SetContent(string.Empty);
            return Task.FromResult<TagHelperContent>(tagHelperContent);
        });

    emailHelper.Process(ctx, output);
    Assert.AreEqual("a", output.TagName);
    Assert.AreEqual("mailto:[email protected]", output.Attributes["href"].Value);
}

第一个断言正在传递,如果我在标记帮助器类中设置断点,则可以看到属性与正常运行应用程序时传递的属性相匹配,但是由于某些原因,MailTo在测试过程中未将pascal映射到驼峰大小写

我的工作基于在Github上找到MVC标签帮助器单元测试的源代码,但我想我缺少一些东西。

任何建议还是我必须emailHelper.MailTo在测试中提出的建议,老实说,如果这样的话,这似乎是个小小的答案:(希望这只是我忽略的细微差别!

恩科西

看来您没有在被测系统上设置属性。

emailHelper.MialTo = "Support";

这意味着这行代码

var addr = $"{MailTo}@{EmailDomain}";

如果MailTo在处理时为空,则不会生成预期的电子邮件地址

在您的代码定制实现中,您无法访问上下文,因此可以推断出除非您实际设置了MailTo属性,否则Process在单元测试中调用属性时,它将没有值

当在实时代码中运行时,框架将为您解释剃刀并为您填充属性,但在单元测试中并非如此。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

ASP.NET Core MVC 标签标签助手

在ASP.NET Core MVC中选择标签助手

ASP .Net Core自定义标签助手将CamelCase属性转换为空格

ASP.Net Core:从一个标签助手输出2个标签

在ASP.Net Core 2中使用标签助手生成一个不错的URL

使用标签助手调用控制器,包括来自 asp.net core mvc 中搜索栏的数据

在ASP.NET Core MVC中使用标签助手的优势是什么

静态 ID - ASP.NET Core 分布式缓存标签助手

ASP.NET Core自定义标签助手无法正常工作

在 asp.net core 中单元测试 UserManager<IdentityUser>

API ASP.NET Core 中的单元测试

如何在ASP.NET Core中对Web API的动作过滤器属性进行单元测试?

asp.net vnext中的自定义输入标签助手

在Asp.Net MVC core 2.2中使用标签助手时,删除Chrome中的自动日期选择器

如何在ASP.NET Core的X单元单元测试中模拟AutoMapper IConfigurationProvider

Asp.Net Core WebApi:创建单元测试

Asp.Net Core MVC Web应用程序中的单元测试

在ASP.NET Core中对自定义密码验证器进行单元测试

模拟ASP.NET Core中的User.Identity以进行单元测试

如何检查ASP.NET Core 3.0的单元测试中是否记录了错误?

如何在ASP.NET Core中对ViewBag进行单元测试?

使用ASP.NET Core在单元测试中模拟POST请求

如何在ASP.NET Core MVC中对RazorViewEngineOptions进行单元测试?

asp.net 核心 post 方法、标签助手和查询字符串

asp.net 核心标签助手的模型前缀要求不一致

在Asp.NET MVC中对ViewResult进行单元测试

如何使用ASP.NET 5(MVC 6)中的Response属性对控制器动作进行单元测试?

获得在.NET核心类的公共属性

使用json.net中的非公共设置器反序列化公共属性