I'd like to write some guides for unit test writing. Please free to extend it as you want.
Sequences
Write some atomic functions with names stepDoingSomething, like this:
1 def stepExample(self,sequence=None,**kw):
2 pass
Then in function named test_nn_description sequence them:
1 def test_01_example(self, quiet=0, run=run_all_test):
2 if not run: return
3 sequence_list = SequenceList()
4 sequence_string = """
5 stepExample
6 stepExample
7 stepExample
8 stepExample
9 stepExample
10 stepExample
11 """
12 sequence_list.addSequenceString(sequence_string)
13 sequence_list.play(self)
Important: Remember that it is not possibile to access some system areas between sequences - one sequence is one full scenario.
Checking
Rule: Never create dicts to check for assertions.
Reason: When something goes wrong, you'll have to run test to understand what is wrong.
Always check for smallest possible problem in check.
Assertions
This is list of found nice assertions:
assert assertAllowedContentTypes assertAlmostEquals assertAttributePortalType assertAuth assertCatalogRaises assertCell assertCellIsNone assertCopyErrorUnauth assertDeclaration assertDictsMatch assertEqual assertEqualDelta assertEquals assertFalse assertFieldInGroup assertGuard assertHooks assertInContext assertLogsMessage assertMovementExists assertNotEqual assertNotEquals assertPermission assertPermissionsOfRole assertPolicyAllows assertPolicyDenies assertPRoles assertPSRaises assertRaises assertRangeMatch assertRolesEqual assertRolesOfUser assertSameSet assertSetattrDeclaration assertSetattrState assertState assertTrue assertTypeImplements assertUE assertUnauth assertUserCanAccessDocument assertUserCanAddDocument assertUserCanChangeLocalRoles assertUserCanModifyDocument assertUserCanPassWorkflowTransition assertUserCanViewDocument assertUserDoesNotExists assertUserExists assertUserHavePermissionOnDocument assertUserHaveRoleOnDocument assertValidatorRaises assertWorkflowTransitionFails assertXMLViewIsEqual
Generated by
[shufla@machine Products]$ find /usr/lib/zope/lib/python/Products/ .\ -name \*py | xargs egrep -o -h 'assert[a-zA-Z]*' | sort | uniq | sort
And similarly, failIf:
failIf failIfDifferentSet failIfEqual failIfLocked failIfLogsMessage failIfUserCanAccessDocument failIfUserCanAddDocument failIfUserCanChangeLocalRoles failIfUserCanModifyDocument failIfUserCanPassWorkflowTransition failIfUserCanViewDocument failIfUserHavePermissionOnDocument failIfUserHaveRoleOnDocument