对于两个非常相似的控制器操作,我有两个非常相似的规范:VoteUp(int id) 和 VoteDown(int id)。这些方法允许用户向上或向下投票;有点像 StackOverflow 问题的投票赞成/反对票功能。规格是:
投票:
[Subject(typeof(SomeController))]
public class When_user_clicks_the_vote_down_button_on_a_post : SomeControllerContext
{
Establish context = () =>
{
post = PostFakes.VanillaPost();
post.Votes = 10;
session.Setup(s => s.Single(Moq.It.IsAny<Expression<Func<Post, bool>>>())).Returns(post);
session.Setup(s => s.CommitChanges());
};
Because of = () => result = controller.VoteDown(1);
It should_decrement_the_votes_of_the_post_by_1 = () => suggestion.Votes.ShouldEqual(9);
It should_not_let_the_user_vote_more_than_once;
}
投票:
[Subject(typeof(SomeController))]
public class When_user_clicks_the_vote_down_button_on_a_post : SomeControllerContext
{
Establish context = () =>
{
post = PostFakes.VanillaPost();
post.Votes = 0;
session.Setup(s => s.Single(Moq.It.IsAny<Expression<Func<Post, bool>>>())).Returns(post);
session.Setup(s => s.CommitChanges());
};
Because of = () => result = controller.VoteUp(1);
It should_increment_the_votes_of_the_post_by_1 = () => suggestion.Votes.ShouldEqual(1);
It should_not_let_the_user_vote_more_than_once;
}
所以我有两个问题:
我应该如何处理这两个规格?它甚至是可取的,还是我实际上应该为每个控制器操作制定一个规范?我知道我通常应该这样做,但这感觉就像在重复自己很多次。
有没有办法
It
在同一规范中实现第二个?请注意,这It should_not_let_the_user_vote_more_than_once;
需要我规范调用controller.VoteDown(1)
两次。我知道最简单的方法也是为它创建一个单独的规范,但它会再次复制和粘贴相同的代码......
我仍然掌握 BDD(和 MSpec)的窍门,而且很多时候不清楚我应该走哪条路,或者 BDD 的最佳实践或指导方针是什么。任何帮助,将不胜感激。