Các khuôn khổ BDD như SpecFlow được thiết kế để giúp các thành viên nhóm kỹ thuật giao tiếp dễ dàng hơn với các bên liên quan phi kỹ thuật của dự án.
Thông số kỹ thuật tiếng Anh không dễ bảo trì hoặc tái cấu trúc. Vì những người chỉ đọc các bài kiểm tra đơn vị cấp hoặc các ví dụ là kỹ thuật và có khả năng đọc mã, tôi thích sử dụng các khuôn khổ kiểm tra đơn vị như NUnit ở cấp đó.
Các trường hợp thường có độ phức tạp hơn nhiều so với các bài kiểm tra đơn vị. Thông thường tôi thấy rằng chúng bao gồm một số kết hợp của logic nghiệp vụ nội bộ, và mỗi khía cạnh tạo thành một sự kết hợp sẽ là trách nhiệm của một đơn vị mã khác. Do đó, logic trong các kịch bản sẽ được phân chia giữa một số bài kiểm tra đơn vị khác nhau và bạn sẽ không thể sao chép chúng.
Thỉnh thoảng tôi sử dụng các tình huống để hướng dẫn các bài kiểm tra đơn vị của mình. Tôi có thể thấy rằng một chút logic kết thúc là trách nhiệm của một đơn vị mã cụ thể, và sau đó tôi có thể sao chép chỉ các bước có liên quan từ kịch bản vào các kiểm tra đơn vị dưới dạng nhận xét.
// Given I have $100 in my account
var account = new Mock<Account>();
account.SetupGet(a => a.Balance).Returns(100);
var accountProvider = new Mock<AccountProvider>();
accountProvider.Setup(ap => ap.AccountFor("lunivore")).Returns(account);
// When I ask for $20
var atm = new ATM(accountProvider);
atm.PutInCardFor("lunivore");
int money = atm.RequestMoney(20);
// Then I should get $20
Assert.AreEqual(20, money);
// And my account should have paid out $20
account.verify(a => a.PayOut(20));
Tôi khuyến khích bạn sao chép ngôn ngữ mà kịch bản được viết (ví dụ: PayOut
). Điều này phù hợp với "ngôn ngữ phổ biến" của Domain Driven Design. Việc mang ngôn ngữ đó vào cả hai bài kiểm tra và mã số đơn vị cũng giúp một nhóm trò chuyện với các bên liên quan, bởi vì bạn sẽ không phải thực hiện việc dịch đi lặp lại.
Đưa ra/Khi/Sau đó vào nhận xét cũng thực sự giúp tôi tập trung vào việc phân phối mã thực sự sẽ được sử dụng, thay vì cố đoán ở tất cả các trường hợp cạnh. Mã chất lượng tốt nhất là công cụ bạn không ghi.
Chúc may mắn!