首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >验证属性用法的规范是否适合MSpec的预期用途?

验证属性用法的规范是否适合MSpec的预期用途?
EN

Stack Overflow用户
提问于 2012-01-14 06:43:15
回答 1查看 184关注 0票数 1

我有一个用MSpec编写的规范,它检查MVC控制器操作是否已经用HttpPost属性标记:

代码语言:javascript
复制
[Subject(typeof(AccountController))]
public class when_user_logs_in : account_controller_spec
{
    It can_only_submit_form_via_post = () => {
        // some logic to check for HttpPost attribute
        };
}

我不确定这是否符合MSpec的使用方式。对于如何检查属性用法,是否有一个约定?如果不是,有没有更好的方法来命名这样的规范?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-14 12:01:04

考虑为检查系统是否显示预期行为而需要执行的操作。你将如何确保“只能通过帖子提交”?您可能会得出这样的结论:您实际上需要使用WatiN或Selenium实现集成测试,并断言在非POST请求方法上显示了一个错误页面(405,不允许使用方法)。

为了进行快速测试,您可以检查附加到AccountController的submit方法的属性。下面是一个记事本的实现,因为我住的地方已经过了午夜了:

代码语言:javascript
复制
[Subject(typeof(AccountController))]
public class when_user_logs_in : account_controller_spec
{
    static object Attribute;

    Because of = () => {
      Attribute = typeof(AccountController)
        .GetMethod("Submit")
        .GetCustomAttributes()
        .FirstOrDefault(x => x.Name.Contains = "HttpPost");
    };

    It can_only_submit_form_via_post = () => {
        Attribute.ShouldNotBeNull();
        };
}

正如您所看到的,规范并没有真正描述系统的行为。您的任何生产代码都不会计算Because委托中的语句。它没有提供真正的价值,对你和你的客户都没有。这就是为什么我建议在运行时行为上使用WatiN或类似于assert的东西,而不仅仅是一些附加到方法上的属性。

我当然不会手动测试每个与POST相关的控制器操作,因为这是太多的重复工作。有没有办法为需要[HttpPost]的方法找到一个约定?

我记得为我的一个较老的FubuMVC项目实现了一个约定,其中我们有一个约定,即所有返回object (方法签名)的控制器操作将自动限制为POST。代码实际上非常简洁,也许MVC操作筛选器可以为您做同样的事情。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8858256

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档