Sẽ là hoàn toàn hợp lý khi viết một bài kiểm tra đơn vị riêng biệt cho phù hợp, bởi vì nó khá không tầm thường.
Mã mà bạn đã hiển thị match
là 1-liner khá nhỏ mà không có trường hợp cạnh khó khăn nào, hoặc nó giống như một ví dụ đơn giản? Dù sao, tôi sẽ cho rằng nó được đơn giản hóa ...
Câu hỏi: điểm nào của việc đưa các hàm và hằng vào không gian tên ẩn danh, nếu điều đó làm cho chúng không thể sử dụng được trong các thử nghiệm?
Câu hỏi này là những gì muốn làm cho tôi nhảy vào đây vì Ded repeatator đã cho thấy một cách hoàn toàn tốt để đột nhập và có được quyền truy cập thông qua #include
mánh khóe. Nhưng từ ngữ ở đây làm cho nó có vẻ như kiểm tra từng chi tiết triển khai nội bộ của mọi thứ là một loại mục tiêu cuối cùng phổ quát, khi nó cách xa nó.
Mục tiêu của kiểm tra đơn vị thậm chí không phải lúc nào cũng là kiểm tra từng đơn vị chức năng vi mô nhỏ bên trong. Câu hỏi tương tự áp dụng cho các hàm phạm vi tệp tĩnh trong C. Bạn thậm chí có thể làm cho câu hỏi khó trả lời hơn bằng cách hỏi tại sao các nhà phát triển sử dụng pimpls
trong C ++, yêu cầu cả hai friendship
và #include
lừa cho hộp trắng, giao dịch dễ dàng kiểm tra chi tiết triển khai để cải thiện thời gian biên dịch, ví dụ
Từ một loại quan điểm thực dụng, nó có thể nghe có vẻ thô thiển nhưng match
có thể không được thực hiện chính xác với một số trường hợp cạnh khiến nó tăng lên. Tuy nhiên, nếu các lớp bên ngoài duy nhất, Foo
, có quyền truy cập đến match
không thể nào sử dụng nó trong một cách mà cuộc gặp gỡ những trường hợp cạnh, sau đó nó chứ không phải không liên quan đến tính chính xác của Foo
rằng match
có những trường hợp cạnh đó sẽ không bao giờ được gặp trừ khi Foo
thay đổi, lúc này các bài kiểm tra Foo
sẽ thất bại và chúng tôi sẽ biết ngay lập tức.
Một suy nghĩ ám ảnh hơn mong muốn kiểm tra từng chi tiết triển khai nội bộ (có lẽ là một phần mềm quan trọng, chẳng hạn) có thể muốn đột nhập và tiệc tùng, nhưng nhiều người không nhất thiết nghĩ rằng đó là ý tưởng tốt nhất, vì nó sẽ tạo ra hầu hết các thử nghiệm giòn có thể tưởng tượng. YMMV. Nhưng tôi chỉ muốn giải quyết từ ngữ của câu hỏi này làm cho nó nghe giống như khả năng kiểm tra mức độ chi tiết-nội bộ-chi tiết-nội bộ-chi tiết này nên là mục tiêu cuối cùng, khi mà ngay cả tư duy kiểm tra đơn vị nghiêm ngặt nhất cũng có thể thư giãn một chút ở đây và tránh x-quang các phần bên trong của mỗi lớp.
Vậy tại sao mọi người định nghĩa các hàm trong không gian tên ẩn danh trong C ++ hoặc dưới dạng các hàm tĩnh phạm vi tệp có liên kết nội bộ trong C, ẩn khỏi thế giới bên ngoài? Và đó chủ yếu là nó: để che giấu chúng khỏi thế giới bên ngoài. Điều đó có một số hiệu ứng từ giảm thời gian biên dịch đến giảm độ phức tạp (những gì không thể truy cập ở nơi khác có thể gây ra vấn đề ở nơi khác) và vv. Có lẽ khả năng kiểm tra các chi tiết thực hiện riêng tư / nội bộ không phải là điều số một trong tâm trí của mọi người khi họ làm điều đó, nói, giảm thời gian xây dựng và che giấu sự phức tạp không cần thiết từ thế giới bên ngoài.
foo.cpp
, không phải tiêu đề! OP dường như hiểu khá rõ rằng bạn không nên đặt không gian tên anon trong một tiêu đề.