dry-python/classes

Hypothesis integration

sobolevn opened this issue · 2 comments

Right now we don't test classes with hypothesis at all.

But, I have a great idea (at least it seems to me like so) of adding a hypothesis plugin, similar to one we have in returns: https://github.com/dry-python/returns/blob/master/returns/contrib/hypothesis/laws.py

What should it do?

  • check_typeclass(typeclass_instance) will check that for all existing types and protocols some valid return type is produced. For example, @typeclass def some(instance) -> str must produce str for all instance, protocol, and supported types and it must produce NotImplementedError for types that are not supported
  • Looks like check_typeclass must have allow_instances, allow_protocols, allow_unknown kw bool arguments to configure what types we actually need in a resulting strategy

It would be a nice companion to our mypy check.

@Zac-HD do you like it? Maybe you have any other ideas?

Sounds cool!

My only real suggestion is a terminology note: "hypothesis plugin" usually refers to code that Hypothesis invokes via a setuptools entry point; so maybe call this kind of thing a "hypothesis extension" or "hypothesis integration" or "automatic testing tool"?

"hypothesis integration"

I like that! Thanks for the suggestion 👍