关于JUNIT的多线程测试问题

来源:互联网 发布:国家java等级考试 编辑:程序博客网 时间:2024/06/05 15:49

具体分析吧,如果这个private 方法有被其他public方法直接调用,而且逻辑清晰,则直接测试这个public方法。

如果这个private方法隐藏的很深,而且逻辑复杂,其他public方法离这个private的"距离"非常远。那就要考虑一下这个类的设计了,不容易测试的类,往往是功能过多,代码太大的类,建议拆分。

比如一个业务处理类,在复杂的业务逻辑处理过程中通过调用一个private方法做加密,而这个加密算法需要测试。类似这种情况,最好的办法就是将加密算法单独提取出一个类,功能非常单一的类,不要献小。然后对它进行junit测试,原来的类只要直接调用这个类就可以了。

这个也就是junit带来的一个推动力,为了达到测试友好,就必须保证代码清晰,相互耦合小。

  1. public class MyThreadTest {   
  2.   
  3.     final static private long THREAD_MAX_RUNTIME = 1000;   
  4.   
  5.     final static private long THREAD_WAITTIME = 200;   
  6.   
  7.     private MyThread myThread1 = null;   
  8.   
  9.     private MyThread myThread2 = null;   
  10.   
  11.     @Before  
  12.     public void setUp() throws Exception {   
  13.         myThread1 = new MyThread();   
  14.         myThread2 = new MyThread();   
  15.     }   
  16.   
  17.     @Test(timeout = THREAD_MAX_RUNTIME)   
  18.     public void testRun() throws Exception {   
  19.         Thread t1 = new Thread(myThread1);   
  20.         Thread t2 = new Thread(myThread2);   
  21.         t1.start();   
  22.         t2.start();   
  23.         Thread tc = Thread.currentThread();   
  24.         synchronized (tc) {   
  25.             while (t1.isAlive() || t2.isAlive()) {   
  26.                 tc.wait(THREAD_WAITTIME);   
  27.             }   
  28.             tc.notify();   
  29.         }   
  30.         Assert.assertEquals(100, myThread1.getI());   
  31.         Assert.assertEquals(100, myThread2.getI());   
  32.     }   
  33. }  
原创粉丝点击