2009-02-05 31 views
9

Tôi đang đánh một khối đường và tôi tự hỏi liệu các tư tưởng tập thể tuyệt vời ở đây có thể giúp ích hay không. Trong ObjC CocoaTouch Tôi đang cố gắng để thử một đối tượng có tham số struct và trả về một struct. OCMock đang ho ra một quả bóng tóc vì vậy tôi đã thử gói với một trận đấu Hamcrest. Không chết. Chức năng/phương pháp tôi là thử nghiệm trông giống như sau:Sử dụng cấu trúc với OCMock hoặc Hamcrest

- (CLLocationCoordinate2D)pixelToLatLong:(CGPoint)aPoint; 

tôi sử dụng mã như thế này:

#define OCMOCK_STRUCT(atype, variable) [NSValue value:&variable withObjCType:@encode(atype)] 
-(void) testMyWidget 
{ 
    CLLocationCoordinate2D ulLL = (CLLocationCoordinate2D){123,456}; 
    CLLocationCoordinate2D lrLL = (CLLocationCoordinate2D){654,321}; 
    [[[(id)myObj expect] andReturn:OCMOCK_STRUCT(CLLocationCoordinate2D, ulLL)] pixelToLatLong:(CGPoint){0,0}]; 
    [[[(id)myObj expect] andReturn:OCMOCK_STRUCT(CLLocationCoordinate2D, lrLL)] pixelToLatLong:(CGPoint){320,460}];//lower right point 
} 

Đó kinda hoạt động. Vì vậy, trong đối tượng của tôi rằng tôi đang thử nghiệm tôi thực hiện các chỉnh sửa cần thiết cần thiết để có được một thanh màu xanh lá cây ... err .. nút màu xanh lá cây trong cửa sổ thông tin xây dựng. Khi tôi chắc chắn rằng thử nghiệm của tôi nên vượt qua tôi nhận được xác nhận lỗi không thành công. Các lỗi thông báo cho tôi rằng phương thức được gọi một cách bất ngờ và liệt kê các giá trị cho các cấu trúc này là các dấu hỏi. Tôi đã cố gắng gói các cấu trúc với các trận đấu Hamcrest nhưng tôi không đi đến đâu cả. Tôi đang sẵn sàng để thoát ra khỏi trình gỡ lỗi của tôi mà sẽ không có nghi ngờ cho tôi thấy những gì sai. Có ai ở đây có vấn đề tương tự với OCMock/Hamcrest và cấu trúc? Nếu vậy, cách tốt nhất để xử lý các loại này là gì?

Trả lời

0

Đôi khi một mô hình được mã hóa bằng tay dễ hơn là cố gắng ép buộc một khung đối tượng giả ngoài các mẫu sử dụng thông thường của nó.

3

Bạn đang ở rất gần. #define của bạn phải là:

#define OCMOCK_STRUCT(atype, variable) [NSValue valueWithBytes:&variable withObjCType:@encode(atype)] 
2

Tôi gặp sự cố với câu trả lời macro; viết hàm trợ giúp trả về cấu trúc trong lớp thử nghiệm và sử dụng:

[[[mockObject stub] andCall:@selector(selectorName) onObject:self] someMethod]; 

hoạt động thực sự tốt.

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