Sự trầm cảm trong các câu trả lời là áp đảo ... Nhưng đừng lo, chúng tôi có the holy book to exorcise the demons of legacy C++ code. Nghiêm túc chỉ cần mua cuốn sách nếu bạn đang xếp hàng trong hơn một tuần kể từ khi bắt đầu với mã C++ kế thừa.
Chuyển đến trang 127: Trường hợp phụ thuộc khủng khiếp bao gồm phụ thuộc. (Bây giờ tôi thậm chí không trong vòng dặm của Feathers Michael nhưng ở đây như ngắn-như-I-thể-quản lý câu trả lời ..)
Vấn đề: Trong C++ nếu classA cần biết về ClassB, Class B khai báo là thẳng-up/văn bản bao gồm trong tập tin nguồn của ClassA. Và kể từ khi chúng tôi lập trình thích đưa nó đến cùng cực, một tập tin có thể đệ quy bao gồm một tỷ người khác quá cảnh. Xây dựng mất nhiều năm .. nhưng hey atleast nó xây dựng .. chúng ta có thể chờ đợi.
Bây giờ, để nói 'việc phân loại ClassA ngay lập tức dưới sự khai thác thử nghiệm là khó khăn' là một cách nói. (Trích dẫn ví dụ của MF - Trình lập lịch biểu là đứa trẻ có vấn đề về poster của chúng tôi với số lượng lớn.)
#include "TestHarness.h"
#include "Scheduler.h"
TEST(create, Scheduler) // your fave C++ test framework macro
{
Scheduler scheduler("fred");
}
Điều này sẽ đưa ra con rồng kèm theo lỗi xây dựng. Thổi # 1 Kiên nhẫn-n-Persistence: Đưa vào mỗi lần đưa vào một lần và quyết định xem chúng tôi có thực sự cần sự phụ thuộc đó hay không. Giả sử SchedulerDisplay là một trong số chúng, có phương thức displayEntry được gọi trong ctor của Scheduler.
Blow # 2 Fake-it-đến-bạn-make-nó (Cảm ơn RonJ):
#include "TestHarness.h"
#include "Scheduler.h"
void SchedulerDisplay::displayEntry(const string& entryDescription) {}
TEST(create, Scheduler)
{
Scheduler scheduler("fred");
}
Và pop đi sự phụ thuộc và tất cả bắc cầu của nó bao gồm. Bạn cũng có thể sử dụng lại các phương thức Fake bằng cách đóng gói nó trong tệp Fakes.h để đưa vào các tệp thử nghiệm của bạn.
Thổi # 3 Thực hành: Có thể không phải lúc nào cũng đơn giản .. nhưng bạn có ý tưởng. Sau vài cuộc quyết đấu đầu tiên, quá trình DEPS vi phạm sẽ được dễ dàng-n-cơ khí
Hãy cẩn thận (Ý của tôi đề cập có nhiều tiền đề? :)
- Chúng ta cần một xây dựng riêng cho các trường hợp thử nghiệm trong tập tin này; chúng ta chỉ có thể có 1 định nghĩa cho phương thức SchedulerDisplay :: displayEntry trong một chương trình.Vì vậy, hãy tạo một chương trình riêng cho các bài kiểm tra lên lịch.
- Chúng tôi không vi phạm bất kỳ phụ thuộc nào trong chương trình, vì vậy chúng tôi không làm cho trình dọn dẹp mã.
- Bạn cần phải duy trì những hàng giả đó miễn là chúng tôi cần thử nghiệm.
- cảm giác của bạn về thẩm mỹ có thể bị xúc phạm trong một thời gian .. chỉ cắn môi của bạn và 'gấu với chúng tôi để một ngày mai tốt hơn'
Sử dụng kỹ thuật này cho một lớp học rất lớn với các vấn đề phụ thuộc nặng. Không sử dụng thường xuyên hoặc nhẹ nhàng .. Sử dụng điểm này làm điểm bắt đầu để tái cấu trúc lại sâu hơn. Theo thời gian, chương trình thử nghiệm này có thể được thực hiện phía sau chuồng khi bạn trích xuất nhiều lớp hơn (VỚI các bài kiểm tra của riêng chúng).
Để biết thêm .. vui lòng đọc sách. Vô giá. Chiến đấu trên bro!
Tôi ước tôi có thể nâng cấp này lên x 10, đây là câu hỏi hay nhất về SO mà tôi đã đọc cho đến nay. Tôi đã mất số lượng những người chỉ từ bỏ 'Chúng tôi không thể kiểm tra .. chúng tôi có mã C++ .. Boohoo!' – Gishu
Gishu, Không thể đồng ý hơn. Tôi đang có những cuộc thảo luận tương tự ở đây, nơi tôi làm việc. – Lou