簡體   English   中英

當我使用doReturn(..)時,PowerMockito正在調用該方法。當(...)

[英]PowerMockito is calling the method when I use doReturn(..).when(…)

我是PowerMockito的新手,有一種我不明白的行為。 以下代碼解釋了我的問題:

public class ClassOfInterest {

  private Object methodIWantToMock(String x) {

    String y = x.trim();

    //Do some other stuff;
  }

  public void methodUsingThePrivateMethod() {

    Object a = new Object();
    Object b = methodIWantToMock("some string");

    //Do some other stuff ...
  }
}

我有一個類,其中包含一個我想要模擬的私有方法,名為methodIWantToMock(String x) 在我的測試代碼中,我正在做以下事情:

@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassOfInterest.class)
public class ClassOfInterestTest {

  @Test
  public void someTestMethod() {

  ClassOfInterest coiSpy = PowerMockito.spy(new ClassOfInterest());

  PowerMockito.doReturn(null).when(coiSpy, "methodIWantToMock", any(String.class));

  coiSpy.methodUsingThePrivateMethod();

  //Do some stuff ...

  }
}

根據上面的代碼,PowerMockito應該簡單地返回一個空時methodIWantToMock被稱為內methodUsingThePrivateMethod()當我運行上面的測試。 然而,實際發生的是當運行此命令時: PowerMockito.doReturn(...).when(...)PowerMockito實際上正在調用methodIWantToMock然后!! 它為什么這樣做? 在這個階段,我只想指定在coiSpy.methodUsingThePrivateMethod();最終調用私有方法時應如何模擬私有方法coiSpy.methodUsingThePrivateMethod(); 線運行。

所以我想出了一個適合我的解決方案。 我沒有使用spy ,而是使用mock然后告訴PowerMockito在我的mock對象中調用methodUsingThePrivateMethod()時調用真實方法。 它基本上和以前一樣做,但只是使用mock而不是spy 這樣,PowerMockito最終不會調用我試圖使用PowerMockito.doReturn(...).when(...)來控制其行為的私有方法PowerMockito.doReturn(...).when(...) 這是我修改過的測試代碼。 我更改/添加的行標記為:

@RunWith(PowerMockRunner.class)
@PrepareForTest(ClassOfInterest.class)
public class ClassOfInterestTest {

  @Test
  public void someTestMethod() {

  //Line changed:
  ClassOfInterest coiMock = PowerMockito.mock(new ClassOfInterest());

  //Line changed:
  PowerMockito.doReturn(null).when(coiMock, "methodIWantToMock", any(String.class));

  //Line added:
  PowerMockito.when(coiMock.methodUsingThePrivateMethod()).thenCallRealMethod();

  coiSpy.methodUsingThePrivateMethod();

  //Do some stuff ...

  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM