2010-01-27 34 views
6

Vì vậy, một đồng nghiệp và tôi đang trong một cuộc tranh luận khá nóng. Chúng tôi đang bắt đầu một dự án mới và chúng tôi đang cố gắng sử dụng BDD. Chúng tôi là cả hai lần đầu tiên và không hoàn toàn hiểu những gì thực hành nên được sử dụng. Chúng tôi đã viết một số thông số kỹ thuật và chúng tôi hiện đang triển khai mã. Mọi thứ đang trở nên khá phức tạp vì có rất nhiều tương tác cơ sở dữ liệu. Chúng tôi đang mắc kẹt về cách chúng tôi nên giả lập dữ liệu của chúng tôi. Phương pháp chúng tôi đang thực hiện sẽ yêu cầu chúng tôi thử phương pháp của chúng tôi thay vì dữ liệu của chúng tôi. Sẽ dễ nhất nếu tôi chỉ cho bạn bằng mã ...BDD/TDD mocking dữ liệu một cách khó khăn

public static void AssignLeadToDistributor(int leadId, int distributorId) 
{ 
    Lead lead = GetById(leadId); 
    lead.DistributorId = distributorId; 
    Save(lead); 
} 

Về cơ bản, chúng tôi sẽ phải ghi đè GetById() và Save() để trả về dữ liệu giả để chúng tôi kiểm tra điều này. Có vẻ như có ý nghĩa hơn để làm điều đó như sau:

public static void AssignLeadToDistributor(Lead lead, Distributor distributor) 
{ 
    lead.DistributorId = distirbutor.Id; 
} 

Sau đó, chúng tôi chỉ có thể chế nhạo đối tượng của chúng tôi.

Rõ ràng phương pháp thứ hai giúp dễ dàng kiểm tra hơn. Tuy nhiên, đối số là chúng tôi không muốn phải tìm nạp một đối tượng khách hàng tiềm năng và nhà phân phối mới trên mã giao diện người dùng của chúng tôi, vì sẽ dễ dàng hơn khi chuyển các id của đối tượng của chúng tôi. Cắt giảm mã thực tế trong giao diện người dùng của chúng tôi.

Hy vọng tôi đã giải thích đủ rõ.

Các bạn nghĩ sao? Cách nào có ý nghĩa hơn?

+0

Vâng, chắc chắn, Biểu đồ quyết định nhị phân rất tuyệt, nhưng chúng không phải là thứ cuối cùng của thế hệ cuối cùng mà ám chỉ mọi thứ chúng ta biết đã lỗi thời ... Ồ, chờ đã, đừng bận tâm. –

Trả lời

3

Những gì chúng tôi làm trong các thông số BDD của chúng tôi (câu chuyện có thể thực thi), không phải là giả lập DB, mà thay vào đó sử dụng DB trong bộ nhớ (trong trường hợp của chúng tôi).

Ngoài ra, chúng tôi khởi tạo vùng chứa trước khi bất kỳ trường hợp nào chạy. Điều này là do chúng tôi muốn các thông số kỹ thuật BDD của chúng tôi bắt chước thế giới thực càng xa càng tốt, trong khi vẫn có tốc độ kiểm tra đơn vị thông thường.

Bằng cách xác định thông số BDD theo cách này, chúng tôi nhận thấy nhu cầu kiểm tra đơn vị và thử nghiệm tích hợp giảm và đạt được cả năng suất và khả năng hiểu rõ hơn (mặc dù rất chủ quan vì bạn không thể đo lường các chỉ số đó).

+0

Đây là loại tuyến đường mà chúng tôi đã kết thúc. Nó hoạt động rất tốt. –

+0

Super :-) Chúng tôi đánh giá cao phương pháp này ngày càng nhiều. –

8

Tôi nghĩ rằng vấn đề lớn nhất bạn gặp phải là vì bạn đang sử dụng các hàm tĩnh công cộng (thường là một điều xấu trong các ngôn ngữ OO).

tôi muốn đề nghị chuyển chức năng này để đối tượng Chì, một cái gì đó giống như

public AssignDistributor(int distributorId) { 
    this.DistributorId = distributorId; 
    this.Save(); 
} 

dễ dàng hơn để kiểm tra, và nhiều hơn nữa OO mã giống như =)

2

Tôi thích phương pháp thứ hai tốt hơn, cho lý do bạn đã nói: bạn có thể thử các thông số dễ dàng để thử nghiệm. Bạn đang sử dụng một khuôn khổ tiêm phụ thuộc? Nếu không thì bạn sẽ khuyên bạn nên lập trình các phương thức của bạn bằng cách sử dụng nguyên tắc Dependency Injection cho các mô đun và dễ dàng hơn để kiểm tra mã.

Và tôi đồng ý với Samuel rằng bạn cần tránh sử dụng các phương pháp tĩnh bất cứ khi nào có thể hoặc bạn sẽ thấy rất khó để thử nghiệm chúng.

Các vấn đề liên quan