1) The student didn't study.
2) The student wasn't paying attention in class.
3) The student stayed up late the previous night.
4) The student just broke up with his/her girlfriend or boyfriend.
5) The student didn't have a good foundation from previous classes.
6) The student has test anxiety.
7) The student has senioritis and doesn't feel like learning.
8) The student is waiting to turn 18 for his trust fund to kick in. (This was true one year.)
9) The student didn't meet with the teacher to review prior to the test.
10) The student didn't understand the material and/or had major misconceptions.
And there are probably many others that I didn't even consider that could be on this list.
A test is designed to assess student understanding of concepts (Reason #10) and not other things that can impact a student's performance (Reasons #1 - 9). I know many of my math teacher colleagues at other schools allow for re-testing. I even re-test from time to time. But at some point students need to be held accountable for what they learn. And if they don't learn it, they re-take the course in high school or take a remedial course in college.
If I constantly allow re-testing and it is because of reasons like #1, #2, or #3, then I am just reinforcing bad habits. If it is because of Reason #6, then the student should get help from the learning specialist. If it is a reason like #7 or #8, then at what point am I the fool for wasting my time and energy? Time and energy are finite resources and I would rather give them to a student who is willing to work and learn.