Tôi có một API lớp có phạm vi mã đầy đủ và sử dụng DI để loại bỏ tất cả logic trong hàm lớp chính (Job.Run) thực hiện tất cả công việc.NMock2.0 - làm thế nào để stub một cuộc gọi không giao diện?
Tôi đã tìm thấy lỗi trong quá trình sản xuất mà chúng tôi không thực hiện một số xác thực trên một trong các trường nhập dữ liệu. Vì vậy, tôi đã thêm một hàm sơ khai được gọi là ValidateFoo() ... Đã viết một bài kiểm tra đơn vị với hàm này để mong đợi một JobFailedException, chạy thử nghiệm - nó không thành công rõ ràng vì hàm đó rỗng. Tôi đã thêm logic xác thực và giờ thử nghiệm đã trôi qua.
Tuyệt vời, bây giờ chúng tôi biết xác thực hoạt động. Vấn đề là - làm thế nào để tôi viết các bài kiểm tra để đảm bảo rằng ValidateFoo() thực sự được gọi là bên trong Job.Run()? ValidateFoo() là một phương thức riêng của lớp Job - vì vậy nó không phải là một giao diện ...
Có cách nào để thực hiện điều này với NMock2.0 không? Tôi biết TypeMock hỗ trợ hàng giả của các loại giao diện không. Nhưng thay đổi lib giả lập ngay bây giờ không phải là một lựa chọn. Tại thời điểm này nếu NMock không thể hỗ trợ nó, tôi sẽ chỉ cần thêm lệnh ValidateFoo() vào phương thức Run() và kiểm tra mọi thứ theo cách thủ công - mà rõ ràng là tôi không thích xem xét phương thức Job.Run() của tôi Phạm vi phủ sóng 100% ngay bây giờ. Bất kỳ lời khuyên nào? Cảm ơn rất nhiều nó được đánh giá cao.
CHỈNH SỬA: tùy chọn khác mà tôi có trong đầu là tạo thử nghiệm tích hợp cho chức năng Job.Run của tôi (tiêm vào thực thi đúng đối tượng hỗn hợp thay vì mocks). Tôi sẽ cung cấp cho nó một giá trị đầu vào xấu cho lĩnh vực đó và sau đó xác nhận rằng công việc thất bại. Điều này hoạt động và bao gồm thử nghiệm của tôi - nhưng nó không thực sự là một bài kiểm tra đơn vị mà là kiểm thử tích hợp để kiểm tra một đơn vị chức năng .... h2 ..
EDIT2: Có cách nào để làm tih không? Bất cứ ai có ý tưởng? Có lẽ TypeMock - hoặc một thiết kế tốt hơn?