2010-08-06 29 views
13

Tôi đang cố gắng thử một phương pháp được tạo khuôn mẫu.Làm thế nào để thử các phương pháp được tạo khuôn mẫu bằng Google Mock?

Đây là lớp chứa phương pháp này để chế nhạo:

class myClass 
{ 
public: 
    virtual ~myClass() {} 

    template<typename T> 
    void myMethod(T param); 
} 

Làm thế nào tôi có thể thử phương pháp này MyMethod sử dụng Google Mock?

+6

xin lỗi vì vô ích, nhưng tôi là người duy nhất, khi anh ấy thấy câu hỏi như thế này, có bản năng đầu tiên để trả lời "Bạn là một mẫu ngu ngốc! một mẫu ngu ngốc ngu ngốc như thế? " –

+1

Cảm ơn bạn đã bình luận của bạn Brian ... Mã nguồn bạn thấy là một phần của một lớp học lớn hơn. Mẫu này không ngu ngốc như vậy ... –

+4

http://www.merriam-webster.com/dictionary/mock: để đối xử với sự khinh miệt hoặc nhạo báng –

Trả lời

7

Trong phiên bản trước của Google Mock, bạn chỉ có thể thử chức năng ảo, xem documentation trong trang của dự án.

Các phiên bản gần đây khác được phép giả lập non-virtual methods, sử dụng những gì họ gọi là tiêm phụ thuộc hi-perf.

Như congusbongus trạng thái:

Google Mock dựa vào thêm các biến thành viên để hỗ trợ phương pháp chế nhạo, và kể từ khi bạn không thể tạo ra các biến mẫu thành viên, nó không thể chức năng mẫu mock

Một workaround, bởi Michael Harrington trong liên kết googlegroups từ các ý kiến, là để làm cho chuyên ngành các phương pháp mẫu mà sẽ gọi một chức năng bình thường có thể được chế giễu. Nó không giải quyết được trường hợp chung nhưng nó sẽ hoạt động để thử nghiệm.

struct Foo 
{ 
    MOCK_METHOD1(GetValueString, void(std::string& value)); 

    template <typename ValueType> 
    void GetValue(ValueType& value); 

    template <> 
    void GetValue(std::string& value) { 
     GetValueString(value); 
    } 
}; 
+1

Có, bạn đúng Ismael, để biết thêm thông tin, tôi tìm thấy liên kết này: http://groups.google.com/group/googlemock/browse_thread/thread/e52b27b7d9b20145 Vì vậy, có một giải pháp để thử các phương pháp được tạo khuôn mẫu. –

+1

Để giải thích về điều này, Google Mock dựa vào việc thêm các biến thành viên để hỗ trợ chế độ mô phỏng, và vì bạn không thể tạo các biến thành viên mẫu, nên không thể giả lập các hàm mẫu. – congusbongus

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