TGViewer
(java || kotlin) && devOps (java || kotlin) && devOps @javakotlindevops · 341 subscribers
Post #637 108
И снова рубрика "Находки из 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
  • 💯 1
More from @javakotlindevops
  1. Sep 29, 2026Ещё про небезопасный AI) Задача - запустить трафик в k8s с Istio через egress для 2 интегр…
  2. Sep 25, 2026Блеск и нищета AI разработки. Мне легко понять эйфорию менеджеров по поводу AI. Без разраб…
  3. Sep 21, 2026Забавный факт, цитата: AI context windows have grown from 512 tokens in 2017 to 2,000,000…
  4. Sep 15, 2026Сколько стоит AI агент? Для кого-то - бесплатно. Платит работодатель. Кому-то хватает мини…
  5. Sep 11, 2026Post #640
  6. Sep 4, 2026PostgreSQL наносит ответный удар) Я думаю все слышали про NoSQL, предлагающие альтернативн…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →