Tôi biết cách giải quyết các vấn đề EXC_BAD_ACCESS, nhưng tôi không chắc chắn làm thế nào để kiểm tra đơn vị cho nó. Có cách nào để nắm bắt EXC_BAD_ACCESS trong mã thay vì chỉ đơn giản là bị rơi không?Tôi làm cách nào để kiểm tra đơn vị cho EXC_BAD_ACCESS?
Dưới đây là lý do tại sao tôi hỏi: Tôi đã viết một thư viện mà chủ yếu sử dụng các khối, như thế này:
- (void)doSomething:(void (^)())myBlock;
Trong thực hiện của tôi doSomething:
Tôi sẽ để cuối cùng chạy block, như thế này:
myBlock();
Nếu một người gọi đi nil cho khối, sau đó nó sẽ sụp đổ với EXC_BAD_ACCESS
, vì vậy giải pháp là để kiểm tra xem khối tồn tại, như thế này:
if (myBlock) {
myBlock();
}
Kiểm tra nil này khá dễ quên, vì vậy tôi muốn cách viết một bài kiểm tra đơn vị không thành công khi xảy ra sự cố. Tôi cho rằng một vụ tai nạn có thể được coi là một thử nghiệm thất bại, nhưng tôi nghĩ rằng nó sẽ là đẹp hơn cho những người khác cố gắng chạy các bài kiểm tra để xem một thông điệp thất bại tốt đẹp chứ không phải là một vụ tai nạn. Bất kỳ ý tưởng?
Điều này rất thú vị. Lúc đầu, nó kết thúc thất bại trong việc kiểm tra bất kể tôi làm gì, nhưng dự án được nhắm mục tiêu như là một thư viện Cocoa Touch tĩnh, và chạy các thử nghiệm khởi chạy iPhone Simulator. Tôi không nghĩ rằng fork() sẽ làm việc ở đó, vì vậy tôi sẽ cố gắng này ra như là một mục tiêu Mac/Cocoa là tốt và xem những gì sẽ xảy ra. Cảm ơn! – greenisus
Ooh, vâng, tôi không biết liệu 'fork()' có khả dụng trên iOS hay không, xin lỗi.Tôi đang gặp khó khăn khi làm việc này cũng hoàn toàn đúng; Tôi sẽ cập nhật nếu tôi tìm ra bất cứ điều gì. –