You need to refactor your code to make it more testable. That's the primary benefit of TDD - if the code's hard to test, then it's probably hard to maintain, understand, etc.
Regarding your example code, for testing class C, the unit test should just test methods on C, like your example shows. Don't worry about invalid input to C - that's not a responsibility of C so it isn't tested in the unit test for C.
To test the validations, you'll write a unit test for class A and call the validation method with different inputs and check the result.