2

我要在 Util 类中模拟一个名为toBeMockedFunction的静态函数。此方法是从toBeUnitTested调用的,它是一个公共静态 void 方法。我想对 BeMocked 函数什么都不做。我尝试了许多部分模拟和存根的方法(发布了这样的 2 的片段)并且无法成功。

请提出我做错了什么。

public class Util {
    // Some code
    public static void toBeUnitTested(CustomObject cb, CustomObject1 cb1, List<CustomObject2> rows, boolean delete) {
        // some code

       toBeMockedFunction(cb, "test", "test");
    }

    public static CustomObject toBeMockedFunction(CustomObject cb, String str1) {
        // some code
    }

}

下面是我的junit类

@RunWith(PowerMockRunner.class)
 @PrepareForTest({ Util.class})
 public class UtilTest {
    @Test
    public void Test1() {
        PowerMockito.spy(Util.class);            

 //mock toBeMocked function and make it do nothing 
 PowerMockito.when(PowerMockito.spy(Util.toBeMockedFunction((CustomObject)Mockito.anyObject(), Mockito.anyString()))).thenReturn(null);

        Util.toBeUnitTested(cb, "test", "test");
     }
  }
  1. 方法2

      PowerMockito.mockStatic(Util.class);  
      PowerMockito.when(Util.toBeUnitTested((CustomObject)Mockito.anyObject(),Mockito.anyString())).thenCallRealMethod();
        Util.toBeUnitTested(cb, "test", "test");
    
4

1 回答 1

2

这是一个如何做到这一点的例子:

@RunWith(PowerMockRunner.class)
@PrepareForTest({ Util.class})
public class UtilTest {
   @Test
   public void Test1() {

      PowerMockito.spy(Util.class);
      PowerMockito.doReturn(null).when(Util.class, "toBeMockedFunction", Mockito.any(CustomObject.class), Mockito.anyString(), Mockito.anyString());

      List<CustomObject2> customObject2List = new ArrayList<>();
      customObject2List.add(new CustomObject2());

      Util.toBeUnitTested(new CustomObject(), new CustomObject1(), customObject2List, true);
   }
}

请注意,您的 OP 代码无法编译。方法toBeMockedFunction(CustomObject cb, String str1)仅接收 2 个参数,您使用 3: 调用toBeMockedFunction(cb, "test", "test");。如您所见,我已将最后一个添加到方法签名中。

希望能帮助到你

于 2015-05-14T09:10:12.750 回答