2012-02-13 38 views
12

Tôi đang sử dụng gmock cho kiểm tra đơn vị mã C++. Tôi không sử dụng khung công tác gtest. Tôi đang sử dụng khung kiểm thử tích hợp của studio trực quan 2008.Tự động tạo các lớp mô phỏng cho gmock

Bây giờ vấn đề của tôi là tôi phải tự viết các lớp mô phỏng cho một lớp thực tế để kiểm tra đơn vị. Ví dụ nếu tôi có lớp A với 5 hàm thì tôi phải viết MockAClass với 5 hàm. Có cách nào để các lớp này được tạo tự động hay không.

class AClass 
{ 
public: 
    virtual int AFunction() 
    { 
     return 5; 
    } 
    virtual int AFunctionWithArguments(int x) 
    { 
     return x; 
    } 



class MockAClass : public AClass 
{ 
public: 
    MOCK_METHOD0(AFucntion, int()); 
    MOCK_METHOD1(AFunctionWithArgument, int(int x)); 
}; 

Trả lời

18

Có một công cụ đi kèm với các dự án giả google sẽ giúp bạn làm điều này. Tuy nhiên tôi nghĩ rằng công cụ này đòi hỏi phải cài đặt python, và tôi không biết nó hoạt động tốt như thế nào trong môi trường Windows. Tôi cũng thấy rằng các tập tin được tạo ra đôi khi cần một chút tinh chỉnh để hoạt động hoàn hảo.

Dưới đây là các thông tin từ docs:

Mẹo: Nếu ngay cả điều này là quá nhiều công việc cho bạn, bạn sẽ tìm thấy những công cụ gmock_gen.py trong Google Mock của kịch bản/máy phát điện/thư mục (lịch sự của dự án cppclean) hữu ích. Công cụ dòng lệnh yêu cầu bạn cài đặt Python 2.4. Bạn cung cấp cho nó một tệp C++ và tên của một lớp trừu tượng được xác định trong nó, và nó sẽ in định nghĩa của lớp mô hình cho bạn. Do sự phức tạp của ngôn ngữ C++ , tập lệnh này có thể không phải lúc nào cũng hoạt động, nhưng nó có thể khá tiện dụng khi có. Để biết thêm chi tiết, hãy đọc tài liệu hướng dẫn người dùng.

Đây là new localization of this script.

+0

cảm ơn, tôi cố gắng sử dụng này và hy vọng nó hoạt động, –

+0

hoạt động của nó. cảm ơn. –

+1

Điều này chắc chắn hoạt động trên Windows. Tôi đang ở Python 2.7 và nó là tốt. Cảnh báo thông thường áp dụng cho các chỉnh tay ... – rholmes

2

Disclaimer: Tôi sử dụng để làm việc tại Typemock

bạn đã xem xét sử dụng một công cụ khác?
Typemock có công cụ gọi là Isolator++ không cần bạn viết "các lớp chế nhạo".

TEST_F(IsolatorTests, SomeTest) 
{ 
     AClass* fakeclass = FAKE(AClass); 
     WHEN_CALLED(fakeclass->AFunction()).Return(10); 

     ASSERT_EQ(10, fakeclass.AFunction()); 
} 

Bạn có thể tìm hiểu thêm về nó ở đây about page

+0

tôi đã đọc về trình cách ly ++. nhưng đó không phải là miễn phí. bạn phải lấy giấy phép cho điều đó. –

+1

Có - không may là họ muốn tiền cho công việc khó khăn của họ;) –

+3

@DrorHelper Có lẽ đáng để từ chối trách nhiệm mà bạn đã từng làm việc cho Typemock. (Không phải điều đó làm cho nó trở thành một sản phẩm tồi tệ, nhưng nó tốt để tiết lộ những nguồn tiềm năng thiên vị như vậy). –

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