I would probably organize it this way:
- /categories/ - category
- /categories/questions/
- question1 - question template with repeater for answers - answer is just a text and checkbox 'correct'
- question2
- ...
- /categories/tests/
- test1 - test template - just a page reference field to ../questions/*
- test2
- ...
I am not 100% sure, but I think you can add children to users, since it's basically just a page? If you can't, it shouldn't be hard create a page for each user automatically, somewhere else in the tree.
- /users/userId/
- ./attempts/
- /md5(pageId)/ - 'test-attempt' template. has a page field for a test, has a text input for a serialized form data.
The workflow would be:
1. load test (build it from the questions)
2. take it
3. on submit, create new page under /attempts/, add answers, calculate results
4. show results.
Bam. Done.