JMockit`Mockup`类为自己的新实例返回null

时间:2015-12-04 07:26:24

标签: java jmockit

描述: 试图模拟这个类(来自某个库):

public class Signal{

   public static Signal fromPool(){
      // returns a recycled instance from a signal pool
   }

   public int getCode(){
     // returns some signal code;
   }
}

班级Sender在内部使用Signal.fromPool()

public class Sender{
   private Signal sig;

   public void ready(){
     sig = Signal.fromPool();
     System.out.println(sig);
   }

   public void send(OutputStream output){
      output.write(sig.getCode());
   }
}

我们需要为Sender编写一些单元测试。

但是,在单元测试环境中,Signal.fromPool()将失败,因为环境缺少一些内部依赖项。

因此,我们决定使用“JMockit”来模拟Signal类:

public class SenderTest{

   // mock signal class
   static class MockSignal extends Mockup<Signal>{

      @Mock
      public static Signal fromPool(){
         return new Signal();
      }

      @Mock
      public int getCode(){
         return 42;
      }
   }

   @Test
   public void testSending(@Mocked OutputStream stream){
       // replace Signal with MockSignal
       new MockSignal();

       // should write 42
       new Expectations(){{
          stream.write(42);
       }};

       // test code
       Sender sender = new Sender();
       sender.ready();
       sender.send(stream);
   }
}

问题:模拟Signal.fromPool会返回null。上面代码中的此语句打印null

     System.out.println(sig);

我的理解是,也许在被模拟的fromPool里面,Mocked类本身没有被实例化:

  @Mock
  public static Signal fromPool(){
     return new Signal();
  }

new Signal如何返回null?任何人都有更好的观点?

0 个答案:

没有答案