Проверки: check, сопоставители, refused
Именованная проверка или таблица проверок; ожидаемый отказ API с кодом.
с 0.1.0-rc.1с 0.3.0
Методы
| Элемент | Сигнатура | Доступен с | API 3 |
|---|---|---|---|
check | check(name, actual, expected=True); check(rows) -> int | 0.1.0-rc.1¹ | без вызовов в выражении |
within, near, one_of, matches | within(low, high), near(value, tolerance), one_of(*options), matches(pattern) | 0.3.0 | без изменений |
refused | with refused(code, *, name=None, **details) as refusal | 0.3.0 | без изменений |
¹ Базовая форма; расширения 0.3.0 описаны в карточке.
Изменения API 3 (0.5.0)
Без изменений, await не нужен.
Правильно
Ожидания — именами CMSIS и сопоставителями; отказ — через refused с кодом и эффектом.
from stm32_gdbtest import within, near, one_of
t.check("VDDA, mV", t.read("board_adc_reading.vdda_mv"), within(2800, 3600))
t.check("stand backend", t.profile.stand["backend"], one_of("openocd", "jlink"))
t.check([
("PA5 output", "GPIOA->MODER & GPIO_MODER_MODER5", "GPIO_MODER_MODER5_0"),
("timer running", "TIM3->CR1 & TIM_CR1_CEN"),
])
with t.refused("unsupported_argument", effect="none"):
t.call("app_step", object())Не рекомендуется
assert и голый try/except не дают имени в отчёте и прячут код отказа. Магические числа вместо имён CMSIS не проверяются контрактом.
assert t.read("app_state.ticks") == 1 # no named check
try:
t.call("app_step", object())
except Exception:
pass # hides the code and the effect
t.check("mode", t.read("GPIOA->MODER") & 0xC00, 0x400) # magic numbersФрагменты показывают отклонённые или нежелательные приёмы, а не рабочий рецепт.
Фрагменты для тела сценария; символы прошивки условные.