2009-09-22 50 views
7

Được nói bởi ông chủ của tôi để sử dụng Moq và đó là nó. Tôi thích nhưng có vẻ như không giống MSTest hoặc mbunit ... bạn không thể kiểm tra các phương thức nội bộMoq làm thế nào để bạn kiểm tra các phương pháp nội bộ?

Vì vậy, tôi buộc phải thực hiện công khai một số nội bộ trong giao diện của mình để tôi có thể kiểm tra nó.

Tôi có thiếu gì đó không?

Bạn có thể thử nghiệm các phương pháp nội bộ bằng cách sử dụng Moq không?

Thanks a lot

+0

Moq không thay thế cho MSTest hoặc mbunit. họ là cả hai khuôn khổ thử nghiệm đơn vị, trong khi Moq là một khuôn khổ mocking. mặc dù hầu như luôn được sử dụng kết hợp, chúng là hai thứ rất khác nhau. btw +1 cho ông chủ của bạn, Moq là tuyệt vời ;-) –

Trả lời

11
+3

Đối với hội đồng có tên mạnh, bạn cần điều này. [assembly: InternalsVisibleTo ("DynamicProxyGenAssembly2, PublicKey = 0024000004800000940000000602000000240000525341310004000001000100c547cac37abd99c8db225ef2f6c8a3602f3b3606cc9891605d02baa56104f4cfc0734aa39b93bf7852f7d9266654753cc297e7d2edfe0bac1cdcf9f717241550e0a7b191195b7667bb4f64bcb8e2121380fd1d9d46ad2d92d2d15605093924cceaf74c4861eff62abf69b9291ed0a340e113be11e6a7d3113e92484cf7045cc7")] –

3

Nếu bạn có nhiều mã mà không được kiểm tra bằng các phương pháp công cộng, bạn có thể có mã mà nên được chuyển đến các lớp học khác.

Như đã nói trong câu trả lời khác, bạn có thể sử dụng thuộc tính InternalsVisibleTo cho điều đó. Nhưng điều đó không có nghĩa là bạn nên làm điều đó.

+0

Không phải là thời điểm kiểm tra đơn vị để kiểm tra tất cả mọi thứ mặc dù? Kiểm tra các phương pháp nội bộ/tư nhân có thể tiết lộ các vấn đề thử nghiệm thông qua các phương tiện công cộng có thể không. Đặc biệt là các chức năng công cộng mới được thêm vào và sử dụng các chức năng nội bộ ... hoặc tôi thiếu gì đó? – CodeRedick

1

Giả định ban đầu của bạn là cần thiết để thử nghiệm phương pháp nội bộ là một quan niệm sai lầm của người mới bắt đầu phổ biến về thử nghiệm đơn vị. Được cấp, có thể tồn tại trường hợp các phương pháp riêng cần được kiểm tra riêng rẽ, nhưng trường hợp chung 99% là các phương pháp riêng đang được kiểm tra ngầm bởi vì chúng làm cho các phương pháp công cộng vượt qua các thử nghiệm của chúng. Các phương thức công khai gọi các phương thức riêng.

Phương thức riêng tư có lý do. Nếu chúng không dẫn đến hành vi có thể kiểm tra bên ngoài, thì bạn không cần chúng.

Có bất kỳ bài kiểm tra công khai nào của bạn không thành công nếu bạn chỉ xóa bài đăng công khai không? Nếu có, thì họ đã được thử nghiệm. Nếu không, thì tại sao bạn cần chúng? Tìm hiểu những gì bạn cần chúng và sau đó thể hiện rằng trong một thử nghiệm chống lại giao diện công cộng.

Lợi ích chính của TDD là mã của bạn trở nên dễ thay đổi. Nếu bạn bắt đầu thử nghiệm nội bộ, sau đó mã trở nên cứng nhắc và khó thay đổi.

5

Không có gì sai khi hiển thị nội bộ cho các lớp khác để kiểm tra. Nếu bạn cần phải kiểm tra nội bộ của một lớp, bằng mọi cách làm như vậy. Chỉ vì các phương thức không công khai không có nghĩa là bạn nên bỏ qua chúng và chỉ kiểm tra các phương thức công khai. Một ứng dụng được thiết kế tốt thực sự sẽ có phần lớn mã được đóng gói trong các lớp của bạn theo cách mà chúng không được công khai. Vì vậy, bỏ qua các phương pháp phi công cộng trong thử nghiệm của bạn là một sai lầm lớn IMHO. Một trong những điểm đẹp của thử nghiệm đơn vị là bạn kiểm tra tất cả các phần của mã của bạn, dù nhỏ và khi nào các bài kiểm tra của bạn hoạt động ở mức 100%, đó là một giả định rất hợp lý khi tất cả các phần này được đặt lại với nhau, ứng dụng sẽ hoạt động đúng cho người dùng cuối. Tất nhiên xác minh rằng phần sau là nơi các bài kiểm tra mức độ tích hợp đi vào - đó là một cuộc thảo luận khác. Vì vậy, kiểm tra đi !!!

1

InternalsVisibleTo là bạn của bạn để kiểm tra nội bộ. Hãy nhớ ký hợp đồng của bạn và bạn an toàn.

2

Từ quan điểm của tôi Mocking nên được sử dụng để giả lập một số hành vi mà chúng tôi đang phụ thuộc vào nhưng không đặt ra để kiểm tra. Do đó:

Hỏi: Tôi có thiếu gì đó không? - Không có bạn không bỏ lỡ bất cứ điều gì, MOQ thiếu khả năng giả lập hành vi riêng tư.

Q: Bạn có thể thử nghiệm các phương pháp nội bộ bằng cách sử dụng Moq không? - Nếu kết quả của hành vi riêng tư hiển thị công khai, thì có bạn có thể kiểm tra phương thức nội bộ nhưng không phải do Moq mà bạn có thể kiểm tra chúng. Tôi muốn làm một điểm ở đây là Mock không phải là khả năng kiểm tra mà là khả năng hành vi tương tự mà chúng tôi không thử nghiệm mà phụ thuộc vào.

C: Lợi ích chính của TDD là mã của bạn trở nên dễ thay đổi. Nếu bạn bắt đầu thử nghiệm nội bộ, sau đó mã trở nên cứng nhắc và khó thay đổi - Tôi không đồng ý với nhận xét này vì 2 lý do chính: 1: Đây không phải là quan niệm sai lầm của người mới bắt đầu, vì TDD không chỉ về khả năng mã hóa mã chất lượng nhanh hơn nhưng cũng tốt hơn. Do đó, càng có nhiều thử nghiệm chúng tôi có thể làm tốt hơn. 2: Nó không làm cho mã khó khăn hơn để thay đổi nếu bạn bằng cách nào đó có thể kiểm tra các phương pháp nội bộ.

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