Re:Local Variables as Accidental Breadcrumbs for Faster Debu...
by aftbit on Thursday October 10, 2024 @06:14PM
(#41804112)
Is there a reason you need specialized assertions over something like Python's generic assert?
In pytest, assertions are rewritten[1] to return something more useful like:
1: https://github.com/pytest-dev/pytest/blob/f373974707f57a0b28...
[ Parent
| on HN ]
Re:Local Variables as Accidental Breadcrumbs for Faster Debu...
by Arnavion on Thursday October 10, 2024 @06:31PM
(#41804234)
Rust has a generic assert too `assert!(foo >= bar);`. I assume (haven't used the crate myself) the advantage of `assertable::assert_ge!(foo, bar)` is that it prints the values of foo and bar in the assert message. The `assert_eq!(foo, bar)` and `assert_ne!(foo, bar)` macros provided by Rust libstd also do this. But the generic `assert!()` just sees the boolean result of its expression and only prints that in its message.
The values of the variables can be included in the generic macro's message via a custom message format, like `assert!(foo >= bar, "foo = {foo}, bar = {bar}");` but having the macro do it by default is convenient. There is an old discussion to have the `assert!()` macro parse its expression to figure out what variables are there and print them out by default, but it's still WIP. ( https://github.com/rust-lang/rfcs/blob/master/text/2011-gene... https://github.com/rust-lang/rust/issues/44838 )
Re:Local Variables as Accidental Breadcrumbs for Faster Debu...
by o11c on Thursday October 10, 2024 @07:00PM
(#41804433)
What's more, pytest errs on the side of "just capture more" and In my experience it's quite useful:
============================= test session starts ==============================
platform linux -- Python 3.11.2, pytest-7.2.1, pluggy-1.0.0+repack
rootdir: /tmp/dl/py
collected 1 item
test_bigsmall.py F [100%]
=================================== FAILURES ===================================
________________________________ test_something ________________________________
def test_something():
> assert get_big_number() > get_small_number()
E assert 0 > 1
E + where 0 = get_big_number()
E + and 1 = get_small_number()
test_bigsmall.py:8: AssertionError
=========================== short test summary info ============================
FAILED test_bigsmall.py::test_something - assert 0 > 1
============================== 1 failed in 0.06s ===============================