i am always writing tests because i very often mess things up and do a lot of encodings, but i haven't yet wrapped my head around this BDD style and other protocol correctness
to me part of the problems start before you even get to writing tests, with a protocol that is unclear or breaks domain boundaries or mixes concerns or creates ambiguities, especially ones that are likely to trigger a human to misunderstand even when the logs are printed out ad nauseum