(java || kotlin) && devOps: post #637 — TG.ME

И снова рубрика "Находки из Python".

Как вы думаете, что делает вот такая конструкция?
@pytest.mark.xfail(strict=True, reason = "будет исправлено в задаче TASK-100") 
def test_function():


Она "фэйлит" прогон, если тест пройден)
Зачем это нужно - если из-за частичного рефакторинга некий код перестал работать. И нужно отследить момент починки в следующих релизах.
Т.е. как только чиним код - тест начинает падать, мы снимаем xfail.
Если тест просто "скипнуть" - это можно забыть сделать. Плюс если упала группа тестов - то ее можно пометить одинаковым описанием и убедится, что починились все. Стандартного функционала для этого нет, но можно поиском по проекту.
Видится, что полезно в плане контроля тестов.
Есть конечно радикальный вариант - вообще избегать отключения тестов, но жизнь - сложная штука).

Отдельно про параметр strict.
Если его поставить в false - получаем тест, который не ломает запуск ни при успешном прогоне, ни при падении.
Зачем это может быть нужно?
Для flaky тестов, которые невозможно починить здесь и сейчас.
Тут конечно у меня вопросики, т.к. такое действие - прямой путь к тому, что про flaky тест мы просто забудем.
А в итоге контроль над тестовым набором, наоборот, ухудшится.

Я сразу стал искать - есть ли аналог в Java?

В JUnit из коробки нет, иначе бы этого поста не было)

Но есть в JUnit Pioneer:
@Test
@ExpectedToFail("будет исправлено в задаче TASK-100")
void testFunction() {


Это аналог strict режима. Не strict режима нет, что IMHO к лучшему.

Обе аннотации позволяют задать исключения, с которыми тест должен упасть.

Python вариант также позволяет задать condition:
@pytest.mark.xfail(condition="not config.getvalue('db')")
def test_function(): ...


В Python интерпретатор есть в runtime, в отличие от Java (там в runtime только компилятор из байт-кода в нативный), поэтому это проще сделать.

Мой вердикт - штука полезная.

#python #java #python_gems #unit_tests #junit
🤩1
August 28, 2026 30