【问题标题】:MVC .NET How to test whether a link appears on a pageMVC .NET 如何测试链接是否出现在页面上
【发布时间】:2012-08-23 10:00:34
【问题描述】:

我开始为我的剃须刀页面 (Check out this link) 编写单元测试。我想知道,如果我想测试特定页面是否存在链接,我可以解析 html 并测试页面上是否出现路由“Admin/Index”。但是,如果我将控制器方法从 Index 更改为 Home - 它会破坏我的 gui 单元测试。

有没有办法对链接是否出现在未与控制器耦合的页面上进行单元测试?

谢谢!

【问题讨论】:

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


    【解决方案1】:

    我认为您不应该尝试将单元测试从控制器的具体操作中抽象出来。如果您从 Index 更改为 Home - 从人类的角度来看没问题,但从单元测试的角度来看,它可以是 DeleteWholeSite 而不是 Home。并且发布此链接非常危险,但可能会误操作。 因此,如果您更改页面上的某些链接,那么您应该维护您的单元测试,以确保您的页面包含反映您希望提供给用户的功能的链接。

    【讨论】:

    • true,但是说如果您对视图进行了单元测试 - 它是否呈现“Admin/Index”链接 - 然后您将控制器的方法名称从 Index 更改为 Home。测试还能通过吗?请注意,我还没有想过如何编写单元测试。会是-expectLink("Admin/Index") 还是expectLink(Url.Action("Index", "Admin")。不同之处在于,如果我更改控制器方法的名称,后者可能会失败-这可能是我想要的行为。
    • 我建议使用 expectLink(Url.Action("Index", "Admin")) 语法。我想说什么。如果您更改应用程序行为中的某些内容,那么您的单元测试应该会失败。您应该维护它们以满足您当前的要求。例如,您有一个带有方法 Foo() 的 MyClass 类。您用单元测试覆盖它,然后想将 Foo() 重命名为 Bar()。在这种情况下,您不会期望您的测试会通过,那么为什么要在 Action 重命名后让它们通过?
    【解决方案2】:

    当然,如果您真的愿意,也可以这样做。我要做的是使用像watinselenium 这样的网络驱动程序来编写这样的测试。

    【讨论】:

    • 我目前使用的是 watin -> 但这些实际上是系统测试,而不是单元测试。它们也需要很长时间才能运行,因此如果您损坏了某些东西,您不会得到快速反馈。
    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2022-06-13
    • 1970-01-01
    • 2013-10-18
    • 1970-01-01
    • 2013-01-10
    • 2015-02-26
    相关资源
    最近更新 更多