gpt4 book ai didi

c# - ASP.NET Core 中的单元测试标记帮助程序 - 填充标记公共(public)属性

转载 作者:太空狗 更新时间:2023-10-30 01:14:29 24 4
gpt4 key购买 nike

尝试在一个新项目上实现最佳实践,我想看看我可以将单元测试扩展到 MVC 标签帮助程序多远。在这种情况下,我有一个非常简单的助手,取自 MVC documentation 的 Tag Helper 部分。 ,所以现在我有 <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-case mail-to正在正确填充驼峰案例 MailTo在 C# 类中。

现在我有以下单元测试:

[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:Support@contoso.com", output.Attributes["href"].Value);
}

第一个断言正在通过,如果我在标签助手类中设置断点,我可以看到属性与正常运行应用程序时传递的属性相匹配,但由于某种原因,pascal 到驼峰式大小写的映射 MailTo在测试期间没有发生。

我的工作基于 MVC Tag Helper Unit Tests 的源代码在 Github 上找到,但我想我遗漏了一些东西。

任何建议或我是否必须设置 emailHelper.MailTo在我的测试中,老实说,如果是这样的话,这似乎有点逃避答案:(希望这只是我忽略的一个细微差别!

最佳答案

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

emailHelper.MialTo = "Support";

表示这行代码

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

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

在您的代码自定义实现中,您没有在任何地方访问上下文,因此按理说,除非您实际设置了 MailTo 属性,否则当 Process 为在单元测试中调用。

在实时代码中运行时,框架会解释 Razor 并为您填充属性,但在单元测试中情况并非如此。

关于c# - ASP.NET Core 中的单元测试标记帮助程序 - 填充标记公共(public)属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43324796/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com