Possible Duplicate: What’s the best way of unit testing private methods?
I am a beginner programmer, and I don't know how to write an application that will be well structured for unit testing. I want to write applications with the ability to afterwards add effective unit tests.
The problem is with private
methods - they can't be testing with outside of their classes.
Should I solve this problem by changing all methods that are private
to protected
, and let the test class extend source class? Or is there a better solution?
My solution (private splitLetters => protected splitLetters) would work like this:
Source class:
class MyClass{
protected splitLetters(int num){
return num+2;
}
}
Test class:
class Test_MyClass extend MyClass{
public splitLettersTest(){
for(int i=0;i<100;i++){
System.println(parent.splitLetters(i));
}
}
}
Solutions:
Not testing private methods - Sometimes a private method is doing very complicated tasks that should be tested very well, and we don't want that user will have access to this methods. Soon the solution is changing private methods to protected.
Nested class way to test - problematic because QA make changes in source code
Reflection - If this makes it possible to call private methods, it looks like a great solution http://www.artima.com/suiterunner/private3.html (I should learn more to understand reflection. I don't understand how reflections do not break all the idea of having public and private methods if we can call private methods from another class.)
Not define private methods (as I showed in my solution) - problematic because sometimes we have to define a private method.
You should not need to test private methods.