Giả sử chúng ta có một phương pháp mà trông như thế này:C#, NUnit: Làm thế nào để đối phó với thử nghiệm của trường hợp ngoại lệ và thực hiện chậm
public IEnumerable<Dog> GrowAll(this IEnumerable<Puppy> puppies)
{
if(subjects == null)
throw new ArgumentNullException("subjects");
foreach(var puppy in puppies)
yield return puppy.Grow();
}
Nếu tôi kiểm tra rằng bằng cách làm này:
Puppy[] puppies = null;
Assert.Throws<ArgumentNullException>(() => puppies.GrowAll());
Các kiểm tra sẽ thất bại và nói rằng nó
dự kiến:
<System.ArgumentNullException>
Nhưng là:null
tôi có thể khắc phục điều đó bằng cách thay đổi thử nghiệm để
Puppy[] puppies = null;
Assert.Throws<ArgumentNullException>(() => puppies.GrowAll().ToArray());
Đây có phải là chỉ là cách bạn thường sẽ làm điều đó? Hay có cách nào tốt hơn để viết bài kiểm tra? Hoặc có thể là cách tốt hơn để tự viết phương pháp?
Cố gắng làm tương tự với các built-in Select
phương pháp, và nó đã thất bại ngay cả khi không một ToArray
hoặc bất cứ điều gì như thế, vì vậy dường như có cái gì đó bạn có thể làm gì về nó ... Tôi chỉ không biết: p
Aaaah, vì vậy đó là lý do tại sao tất cả các phương pháp của bạn trông như thế trong thư viện của bạn ... Làm cho cảm giác! Không chắc tôi có thích nó không ... hehe. Phải nói rằng tôi thích giữ nó trong một phương pháp. Nhưng tốt thôi. Tôi cho rằng tôi sẽ quen với nó sau một thời gian :) – Svish
Đó là một tác dụng phụ không may của các khối lặp. Xem http://msmvps.com/blogs/jon_skeet/archive/2008/03/02/c-4-idea-iterator-blocks-and-parameter-checking.aspx –
Chính xác. Vâng, tôi hiểu tại sao nó lại xảy ra. Chỉ cần không phải là cách đề nghị để đối phó với nó là :) – Svish