视图中单词/短语的单元测试格式

时间:2015-10-15 20:32:51

标签: asp.net-mvc unit-testing razor

我想在我的项目中编写一个专门查看HTML的测试,并告诉我一个单词的每个实例是否总是以某种方式格式化。假设我们公司有一个名为“WidgetFactory”的产品。我想确保这个“WidgetFactory”始终以相同的方式大写,并始终在<strong>标记内。

我不确定单元测试的最佳做法是什么。我已经浏览了预编译的视图,但它看起来从未如此正确。这可能是最好的解决方案。我可能会打开每个.cshtml文件并尝试解析它,以便我只查看HTML文本,但这可能有问题,我真的不想编写Razor解析器。

这是可能的,还是使用单元测试的完全错误的方式?

1 个答案:

答案 0 :(得分:1)

这种测试应该在集成测试中完成,而不是单元测试。您不希望每次运行其他测试时都运行它,只有在推送产品之前,并且想要在Jenkinsappveyor等持续集成系统中运行。您可以使用Selenium Webdriver之类的工具打开浏览器(例如Chrome),并验证最终结果是否包含您希望的文本。

我建议你看一下它真正帮助我们的page pattern

以下是一个示例测试的样子,请注意我们有很多帮助,使测试干净,易于阅读/维护:

[Test]
    public void CreateViewAndEditShouldWork()
    {
        S.OpenWithCI();
        var loginPage = new LoginPage(S);
        var centerListPage = loginPage
            .LoginValidUser("username", "password")
            .MenuClickCenterAndRoomLink();
        var centerPage = centerListPage.ClickCreateLink();

        //Create
        centerPage.Submit();
        Assert.That(centerPage.Error("Name"), Is.StringContaining(Strings.Error_Required));
        Assert.That(centerPage.Error("EnglishName"), Is.StringContaining(Strings.Error_Required));

        centerPage.Name = "Saguenay";
        centerPage.EnglishName = "Sag";
        centerPage.Address = "2089 blv Talbot";
        centerPage.DivisionAfiSelected = true;
        centerPage.Submit();

        centerListPage.ExpectSuccessNotice(Strings.CenterCreatedSuccessfully);

        //View
        var centerDetailsPage = centerListPage.ClickDetailsLink("Saguenay");
        Assert.That(centerDetailsPage.Title, Is.StringContaining("SAGUENAY"));
        Assert.That(centerDetailsPage.Details, Is.StringContaining("Inactive"));
        Assert.That(centerDetailsPage.Details, Is.StringContaining("2089 blv Talbot"));

        //Edit
        centerPage = centerDetailsPage.ClickEdit();
        centerPage.Name = "Chicoutimi";

        centerPage.Submit();
        centerListPage.ExpectSuccessNotice(Strings.CenterUpdatedSuccessfully);
    }

希望它有所帮助!