Tôi đang sử dụng Moq để kiểm tra đơn vị một số mã bao gồm vòng lặp Parallel.foreach
.Tại sao một thử nghiệm đơn vị .NET bao gồm một phụ thuộc phần cứng Parallel.foreach?
Giai đoạn Sắp xếp thiết lập 4 ngoại lệ để được ném trong vòng lặp và sau đó được bao bọc trong AggregateException
.
Điều này thông qua bộ vi xử lý i7 của tôi và tôi đã kiểm tra mã.
Sau đó, một đồng nghiệp phàn nàn rằng nó không được chuyển cho anh ấy. Hóa ra là Parallel.foreach
chỉ sinh ra 2 luồng trên Core2duo của mình trước khi ném bom và do đó chỉ có 2 ngoại lệ được bọc trong AggregateException
.
Câu hỏi đặt ra là phải làm gì với điều này để kiểm tra đơn vị không phụ thuộc vào kiến trúc bộ vi xử lý? Một vài suy nghĩ: -
- Có một Microsoft article trên tay thêm ngoại lệ đối với các
AggregateException
nhưng chúng tôi không quan tâm về việc này như vòng lặp nên thoát vào dịp sớm nhất nếu có một vấn đề. ParallelOptions.MaxDegreeOfParallelism
có thể đặt giới hạn trên cho số lượng chủ đề được sử dụng. Nhưng trừ khi điều này được bật xuống đến 1 (trong đó có vẻ giống như gian lận hơn kiểm tra đơn vị thích hợp) cách có thể kiểm tra đơn vị biết bao nhiêu đề thực sự sẽ được sử dụng và do đó thiết lập Sắp xếp và Khẳng định giai đoạn propertly?
Số lượng ngoại lệ con không phải là yêu cầu và không được kiểm tra theo cách này. Đó là một chi tiết thực hiện. Bạn có thể kiểm tra 1+ ngoại lệ của loại chính xác. –
@HenkHolterman Đúng nhưng tôi phải thiết lập mô hình phù hợp. Bạn có đề nghị tôi nên thiết lập cho số lượng tối đa các cuộc gọi giả có thể nhưng không khẳng định rằng tất cả những cuộc gọi này thực sự được gọi vào cuối? –
Tôi không chắc chắn phần nào bạn muốn thử nhưng nó không quan trọng. –