具体分析吧,如果这个private 方法有被其他public方法直接调用,而且逻辑清晰,则直接测试这个public方法。
如果这个private方法隐藏的很深,而且逻辑复杂,其他public方法离这个private的"距离"非常远。那就要考虑一下这个类的设计了,不容易测试的类,往往是功能过多,代码太大的类,建议拆分。
比如一个业务处理类,在复杂的业务逻辑处理过程中通过调用一个private方法做加密,而这个加密算法需要测试。类似这种情况,最好的办法就是将加密算法单独提取出一个类,功能非常单一的类,不要献小。然后对它进行junit测试,原来的类只要直接调用这个类就可以了。
这个也就是junit带来的一个推动力,为了达到测试友好,就必须保证代码清晰,相互耦合小。
- public class MyThreadTest {
- final static private long THREAD_MAX_RUNTIME = 1000;
- final static private long THREAD_WAITTIME = 200;
- private MyThread myThread1 = null;
- private MyThread myThread2 = null;
- @Before
- public void setUp() throws Exception {
- myThread1 = new MyThread();
- myThread2 = new MyThread();
- }
- @Test(timeout = THREAD_MAX_RUNTIME)
- public void testRun() throws Exception {
- Thread t1 = new Thread(myThread1);
- Thread t2 = new Thread(myThread2);
- t1.start();
- t2.start();
- Thread tc = Thread.currentThread();
- synchronized (tc) {
- while (t1.isAlive() || t2.isAlive()) {
- tc.wait(THREAD_WAITTIME);
- }
- tc.notify();
- }
- Assert.assertEquals(100, myThread1.getI());
- Assert.assertEquals(100, myThread2.getI());
- }
- }