2010-02-11 26 views
14

Tôi tự hỏi nếu có ai biết về các công cụ hoặc kỹ thuật để tự động tiêm lỗi phổ biến vào một chương trình .NET đang chạy. Stuff như ...Lỗi lỗi cho các ứng dụng .NET?

  • ngẫu nhiên tiêm một OutOfMemoryException khi giao
  • ngẫu nhiên tiêm FileNotFoundException khi cố gắng truy cập vào một file
  • ngẫu nhiên tiêm IO hoặc ngoại lệ Mạng khi sử dụng một ổ cắm.

Vì vậy, tôi thực sự đang tìm cách chặn một số cuộc gọi cụ thể trong CLR tương tự như những gì AppVerifier thực hiện cho mã Win32 gốc. Mục đích là để kiểm tra ứng dụng dưới nhiều điều kiện lỗi ngoài kiểm soát của nhà phát triển và để đảm bảo các điều kiện như vậy được xử lý.

+0

Rút cáp mạng của bạn? – ChaosPandion

+3

'Sarcasm' Rút phích cắm bộ nhớ của bạn? –

+1

Chính xác :) Có rất nhiều hacks để làm điều này cho các nguồn tài nguyên khác nhau nhưng nó không quy mô. – noctonura

Trả lời

8

Có một dự án mã vạch gọi là TestAPI có thể thực hiện việc tiêm lỗi thời gian chạy. Bạn cần phải xem số managed code fault injection API. Nó sử dụng CLR profiling API để chặn các cuộc gọi phương thức trong thời gian chạy và sửa đổi hành vi của chúng.

Hãy xem an example để xem cách chèn ngoại lệ vào một cuộc gọi phương thức trong một exe đã được biên dịch.

+0

Tôi đọc qua một vài ví dụ và tôi nghĩ rằng nó trông thực sự hứa hẹn và thực tế là nó là miễn phí chắc chắn sẽ giúp. – ChaosPandion

+0

Có - điều này có vẻ thực sự tốt. – noctonura

0

Tôi không biết làm thế nào để "tiêm" một cách ngẫu nhiên những thứ này, nhưng tôi khuyên bạn nên thử một phần không bình thường dưới sự kiểm soát của bạn, và giả sử ném một ngoại lệ vào một số thử nghiệm của bạn.

+0

Tôi có cảm giác anh ấy đang nói về số lượng lớn mã mà anh ấy muốn xác minh vì vậy tôi nghi ngờ anh ấy sẽ có thể thiết kế lại tất cả mã này để hỗ trợ chế nhạo. – ChaosPandion

+0

Tôi muốn nói đó là vấn đề của anh ấy, nhưng tôi hiểu những khó khăn trong việc giải quyết một cơ sở mã di sản lớn.Tôi không nhìn thấy một cách để kiểm tra đúng các kịch bản này mà không cần tái cấu trúc để chế nhạo, nhưng có thể một người khác sẽ biến cái gì đó lên. –

5

Typemock Isolator có vẻ là đặt cược tốt nhất của bạn.

Dưới đây là những gì bạn có thể làm, nếu bạn muốn ném FileNotFoundException để mô phỏng thử nghiệm.

Trong mã sản xuất của bạn, bạn có phương pháp như vậy

public static Project OpenProject(string filePath) 

Và trong mã thử nghiệm của bạn, bạn có thể giả mạo các OpenProject gọi như thế này

Isolate.WhenCalled(()=>Project.OpenProject(nulll)).WillThrow(new FileNotFoundException()); 

Và khi mã của bạn nhấn OpenProject, một FileNotFoundException sẽ bị ném.

1

Đây không phải là điểm chính xác với yêu cầu của bạn, nhưng nó có liên quan và có thể hữu ích cho cùng một mục tiêu cải thiện việc xử lý ngoại lệ trong ứng dụng của bạn.

Redgate Exception Hunter http://www.red-gate.com/products/Exception_Hunter/index.htm

tôi đã không sử dụng sản phẩm đặc biệt này nhưng sản phẩm Redgate khác mà tôi đã sử dụng là tuyệt vời.

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