Git for source code control. A notepad and pencil for listing out the TODOs. I write "Done" next to a bullet point when it's done. I might rewrite the list occasionally without the done items for clarity or write numbers next to the bullet points to prioritise them. I think if you can't write out a task description as a short sentence then it's either not well understood enough or too broad in scope to accomplish easily. In the latter case it needs breaking out into a set of smaller tasks.
I don't use any framework for unit tests. Only a short program for each test that returns 0 on success or some other number for failure and prints a message to stderr about what the problem is. These get run in a loop from a shell script.
replies(1):