Tôi có hai thông số rất giống nhau cho hai hành động điều khiển rất giống nhau: VoteUp (int id) và VoteDown (int id). Các phương thức này cho phép người dùng bỏ phiếu một bài đăng lên hoặc xuống; giống như chức năng bỏ phiếu lên/xuống cho các câu hỏi StackOverflow. Các thông số kỹ thuật bao gồm:DRY-ing thông số kỹ thuật tương tự cho hành động điều khiển ASP.NET MVC với MSpec (hướng dẫn BDD)
VoteDown:
[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;
}
VoteUp:
[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;
}
Vì vậy, tôi có hai câu hỏi:
Làm thế nào tôi nên đi về DRY-ing hai thông số kỹ thuật này ? Nó thậm chí còn được khuyến khích hay tôi nên thực sự có một spec cho mỗi hành động điều khiển? Tôi biết tôi thường nên, nhưng điều này cảm thấy như lặp đi lặp lại bản thân mình rất nhiều.
Có cách nào để triển khai số
It
thứ hai trong cùng một thông số kỹ thuật không? Lưu ý rằngIt should_not_let_the_user_vote_more_than_once;
yêu cầu tôi chỉ định để gọicontroller.VoteDown(1)
hai lần. Tôi biết dễ nhất là tạo ra một spec riêng cho nó quá, nhưng nó muốn được sao chép và dán cùng một mã một lần nữa ...
tôi vẫn nhận được hang của BDD (và MSpec) và nhiều lần không rõ tôi nên đi theo cách nào, hoặc những thực hành hay hướng dẫn tốt nhất cho BDD là gì. Bất kỳ trợ giúp sẽ được đánh giá cao.
Cảm ơn một lần nữa. Tôi biết về các hành vi (từ ví dụ mã nguồn MSpec de thực sự), nhưng nó cảm thấy như tôi sẽ phải shoehorn nó vào kịch bản của tôi; nó không cảm thấy tự nhiên. Câu trả lời rực rỡ, cảm ơn một triệu. –