kgb 6.1 has been released, featuring some new spy operations and enhancements to existing ones.
kgb is our Python unit test library for crafting function spies, making it easy to check on the calls made during a test or to override their behavior, in ways not possible with Python’s mock
.
New spy operations
Two new spy operations, kgb.SpyOpReturnInOrder
and kgb.SpyOpRaiseInOrder
, have been added. These work like a combination of kgb.SpyOpReturn
/kgb.SpyOpRaise
and kgb.SpyOpMatchInOrder
. Each takes a list of results, and each call will receive the next result in the list, making it really easy to build tests that, somewhere, involve repeated calls to some function.
For example:
spy_on(our_agent.get_identity, op=kgb.SpyOpReturnInOrder([
'nobody...',
'who?',
'not telling...',
]))
spy_on(pen.emit_poison, op=kgb.SpyOpRaiseInOrder([
PoisonEmptyError(),
Kaboom(),
MissingPenError(),
]))
Nesting spy operations
The kgb.SpyOpMatchInOrder
and kgb.SpyOpMatchAny
operations can now nest other spy operations, which simplifies returning or raising values, and can even allow for more advanced interactions with a spy.
The call definitions passed now accept an 'op'
key pointing to a spy operation instance, which will be invoked if a call matches.
For example:
spy_on(lockbox.enter_code, op=kgb.SpyOpMatchInOrder([
{
'args': (42, 42, 42, 42, 42, 42),
'op': kgb.SpyOpRaise(Kaboom()),
'call_original': True,
},
]))
Get started with 6.1
See the release notes for the full list of changes.
You can install kgb today through pip
:
$ pip install -U kgb
Visit our kgb documentation to see how to use kgb in your projects.