[Python-ideas] [Brainstorm] Testing with Documented ABCs

Steven D'Aprano steve at pearwood.info
Wed Nov 28 04:44:43 EST 2018


On Tue, Nov 27, 2018 at 10:47:06PM -0600, Abe Dillon wrote:

> If we could figure out a cleaner syntax for defining invariants,
> preconditions, and postconditions we'd be half-way to automated testing
> UTOPIA! (ok, maybe I'm being a little over-zealous)

You should look at the state of the art in Design By Contract. In 
Eiffel, DBC is integrated in the language:

https://www.eiffel.com/values/design-by-contract/introduction/

https://www.eiffel.org/doc/eiffel/ET-_Design_by_Contract_%28tm%29%2C_Assertions_and_Exceptions


Eiffel uses a rather Pythonic block structure to define invariants. 
The syntax is not identical to Python's (Eiffel eschews the colons) but 
it also comes close to executable pseudo-code.

trust this syntax requires little explanation:

	require
		... preconditions, tested on function entry
	do
		... body of the function
	ensure
		... postconditions, tested on function exit
	end

There is a similar invariant block for classes.

Cobra is a language which intentionally modeled its syntax on Python. It 
too has contracts integrated with the language:

http://cobra-language.com/how-to/DeclareContracts/

http://cobra-language.com/trac/cobra/wiki/Contracts




-- 
Steve


More information about the Python-ideas mailing list