【问题标题】:Mocking new object method call in Junit5在 Junit5 中模拟新的对象方法调用
【发布时间】:2022-01-31 13:01:25
【问题描述】:

我已经模拟了另一个类方法,它在生产中被调用,比如 new B().somemethod (arg) 有返回类型 void 和 newD().anymenthod() 它有返回类型 inputstream

在测试方法中,我在做mocking Like donothing().when(b). somemethod ();

When(d.anymehod()).thenreturn(inputstream);(here inputstrem i am providing)

这里我已经做了@Mock B b;

@Mock D d;

这里我的测试用例运行成功,但当时也调用了模拟方法。

这里我不想改变生产代码,只有测试用例实现可以改变。

class TestSystem {
    @InjectMock
    System sys;

    @Mock 
    B b;
    @Mock
    D d;

    @BeforeEach
    void setup() {
        MockitoAnnotation.openMocks(this);
    }

    @Test
    testModule() {
        InputStrem input = null;
        when(d.anymethod()).thenReturn(inputStrem);
        doNothing().when(b).somemethod();
        sys.module();
    }
        
Class System{
    public void module() {
        //some code .....
    
        new B().somemethod();
    
        inputStrem = new D().anymethod(value);
    }

Class B {
    public void somemethod(){
    //some code .....
    }
}


Class D {
    public InputStrem anymethod() {
        //some code ......

    }    
}

【问题讨论】:

    标签: java unit-testing junit mockito junit5


    【解决方案1】:

    尝试像这样初始化 Mock:

      @InjectMocks
      private System sys;
    
      @Mock 
      B b;
      @Mock
      D d;
    
      private AutoCloseable closeable;
    
      @BeforeEach
      void init() {
        closeable = MockitoAnnotations.openMocks(this);
    
      }
    
      @AfterEach
      void closeService() throws Exception {
        closeable.close();
    
      }
    
    
      @Test
      testModule(){...}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-12
      • 2016-09-05
      • 1970-01-01
      • 2016-06-08
      • 2010-09-25
      相关资源
      最近更新 更多