że mamy metodę, która wygląda tak:C#, NUnit: Jak radzić sobie z testami wyjątków i wykonanie odroczonej
public IEnumerable<Dog> GrowAll(this IEnumerable<Puppy> puppies)
{
if(subjects == null)
throw new ArgumentNullException("subjects");
foreach(var puppy in puppies)
yield return puppy.Grow();
}
Gdybym przetestować, że w ten sposób:
Puppy[] puppies = null;
Assert.Throws<ArgumentNullException>(() => puppies.GrowAll());
Test nie powiedzie się powiedzenie, że
Oczekiwany:
<System.ArgumentNullException>
Ale było:null
mogę naprawić zmieniając test do
Puppy[] puppies = null;
Assert.Throws<ArgumentNullException>(() => puppies.GrowAll().ToArray());
Czy to tylko jak byś zwykle zrobić? Czy istnieje lepszy sposób na napisanie testu? A może lepszy sposób na napisanie samej metody?
próbował zrobić to samo z wbudowanego Select
metody, a nie udało się nawet bez ToArray
lub coś podobnego, więc najwyraźniej nie jest coś, co można zrobić ... Po prostu nie wiesz co: p
aaaa, więc dlatego wszystkie metody wyglądać, że w tej bibliotece twojej ... ma sens! Nie jestem pewien, czy mi się to podoba ... hehe. Muszę powiedzieć, że wolę zachować ją w jednej metodzie. Ale no cóż. Przypuszczam, że przywyknę do tego po chwili :) – Svish
To niefortunny efekt uboczny bloków iteratora. Zobacz http://msmvps.com/blogs/jon_skeet/archive/2008/03/02/c-4-idea-iterator-blocks-and-parameter-checking.aspx –
Dokładnie. Tak, zrozumiałem, dlaczego to się stało. Po prostu nie jak zalecany sposób radzenia sobie z tym było :) – Svish