11 August 2008

Покриття тестами для усіляких там ArgumentException-ів

Як на мене, безглуздо перевіряти код який перевіряє аргументи, адже цей тип помилок набагато легше оптимати за допомогою FxCop чи чогось іншого, дотого ж цілком автоматично. Отже залишається багато коду на кшталт цього:


public override IEnumerable<ConnectionRecord> Query(ConnectionQueryContext context)
{
    if (context == null)
    {
        throw new ArgumentNullException("context");
    }
    // Real code goes here!
}

Але іноді дуже вже хочеться 100% покриття, не заради якості коду(покриття і якість аж ніяк не зв’язані), а просто заради 100% ;).

Тільки вчора спало на думку, що це дуже легко вирішити:


public override IEnumerable<ConnectionRecord> Query(ConnectionQueryContext context)
{
    ArgumentUtilities.EnsureArgumentNotNull(context, "context");
    // Real code goes here!
}

Навіть без Pex обійшлись…

Помічено як: , ,
 

Коментарі

# eisernWolf said:

>>Тільки вчора спало на думку, що це дуже легко вирішити:

Выкарыстоўваў такі падыход гады 2-3 таму. Хутка адказаўся, бо exception валіцца як раз у гэтым EnsureArgumentNotNull, і трэба глядзець StackTrace, каб зразумець, што сапраўднай крыніцай з'яўляецца аргумэнт мэтаду Query. Можна пры дапазе reflection выцягнуць імя мэтада, які ініцыіраваў праверку, але пры дэбаге нязручна.

>>Як на мене, безглуздо перевіряти код який перевіряє аргументи

Ёсьць розніца. Уяві мэтад SomeMethod(String str). Для яго null можа быць валідным парамэтрам, а можа і не. Тое ж самае для пустой стракі. У тэстах гэта ўсё прапісана, а што пры гэтым бачна у FxCop?

22 October 08 at 7:36 AM
# Mike Chaliy said:

2eisernWolf, кул ;), ти мій кумир! А в тебе є локальний блог?

>> Хутка адказаўся, бо exception валіцца як раз у гэтым EnsureArgumentNotNull, і трэба глядзець StackTrace, каб зразумець, што сапраўднай крыніцай з'яўляецца аргумэнт мэтаду Query.

Всеодно потрібно дивитись StackTrace, так чи інакше але месаги не достатньо.

>> Ёсьць розніца. Уяві мэтад SomeMethod(String str). Для яго null можа быць валідным парамэтрам, а можа і не. Тое ж самае для пустой стракі.

Та ні, тут ти вже перевіряєш логіку. Тобто якщо для тебе валідний нулл, ти щось з ним робиш? Авжеж робиш, і це щось потім вже і тестуєш. Це нормально.

22 October 08 at 11:11 AM
# eisernWolf said:

>>ти мій кумир!

А я на цябе вось сёньня падпісаўся. :)

>>А в тебе є локальний блог?

Толькі на GDN.

>>Всеодно потрібно дивитись StackTrace

Сапраўды, але ж мне неяк нязручна, калі дэбагер астанаўліваецца заўсёды ў гэтым мэтадзе. Вырашыў для себя, што заўсёды буду правяраць "не-адыходзячы ад касы". У меня для гэтага спецыяльны сныпет ёсьць. Трэба толькі імя парамэтра ўвесьці. if ... ArgumentNullException ... ужо само-сабой падстаўляцца. Так што тое на тое і выходзіць. А увогуле пры TDD падыходзе неабходнасьць у дэбагере вельмі рэдка зьяўляецца.

>>Та ні, тут ти вже перевіряєш логіку.

Гэта я да таго, што тэсты павінны несьці найбольш поўную інфармацыю аб паводзінах кода. І калі кідаецца exception пры value > 5, гэта павінна быць бачна з тэстаў.

P.S. Гэта нічога, што я па-беларуску пішу? :)

22 October 08 at 11:59 AM
# Mike Chaliy said:

>>Сапраўды, але ж мне неяк нязручна, калі дэбагер астанаўліваецца заўсёды ў гэтым мэтадзе.

Незнаю, в мене це дуже нечасто, це всеж таки щось на кшталт Дебаг.Ассерт. Ну а коли виникає, то є віконце коллсетк, там просто клацнути на попердній метод, ІМХО це не є проблемою.

>>Гэта я да таго, што тэсты павінны несьці найбольш поўную інфармацыю аб паводзінах кода.

Так само, ці перевірки більше потрібні у якості дебаг.ассерт тільки для рантайму. Вони не є логокою. Менше п'яти це реально логіка. Зрозмуло що це потрібно тестувати.

Так чи інакше, це дуже суб'єктивно, я можу і помилятися, і через декілька років таки повернусь до повногї перевірки. В мене до речі теж є сніпет, тобто багато, окремі для рядків, окремі для енумів і окрімі для об'єктів.

>>P.S. Гэта нічога, што я па-беларуску пішу? :)

Принаймні все зрозуміло ;). Тим паче що в мене тут повно рісійських коментарів, прикольно що з'явилися білоруські ;). Якщо чесно коли я побачив в пошті те що ти написав, подумав що стьоб, але потім почитав, а там все серйозно.

22 October 08 at 2:47 PM
Анонімні коментарі деактивовані. Увійдіть або Зареєструйтесь щоб мати доступ до ресурсів Спільноти.

About Mike Chaliy

Вчу українську, багато працюю. Цікавлюсь моделюванням небезпек. Більшість часу витрачаю на .Net.