当前位置: 首页 > 知识库问答 >
问题:

在java中模拟从私有方法返回的对象

轩辕煌
2023-03-14

我需要模拟从私有方法返回的对象。我在我的项目中与junit和mockito合作。我不能在这里粘贴实际代码,但示例代码如下所示。这里的限制是代码是遗留的,我现在无法重构

要测试的类

 public class TestService {

   public String test() {
     TestDao testDao = getDaoObject();
     int num = testDao.getData();
     if (num < 10) {
       return "hey you loose";
     } else {
       return "hey you win";
     }
   }

   private TestDao getDaoObject() {
     return new TestDao();
   }
 }

道类

public class TestDao {

  public int getData() {
    return 5;
  }
}

测试类别

 public class JUnitServiceTestExample {
   @Test
   public void test() {
     TestDao testDao = Mockito.mock(TestDao.class);
     TestService test = new TestService();
     when(testDao.getData()).thenReturn(20);
     assertEquals(test.test(), "hey you win");
   }
 }   

请帮帮忙

共有1个答案

慕嘉运
2023-03-14

您可以稍微修改getDaoObjectPrivatePackage-Private,如下所示:

TestDao getDaoObject() {
   return new TestDao();
}

然后使用Mockito。spy(new TestService())来存根getDaoObject()并返回模拟的testDao。

 public class JUnitServiceTestExample {
   @Test
   public void test() {
     TestDao testDao = Mockito.mock(TestDao.class);
     TestService test = Mockito.spy(new TestService());
     when(testDao.getData()).thenReturn(20);
     doReturn(testDao).when(test).getDaoObject();

     String result = test.test();

     assertEquals("hey you win", result);
   }
 }   

给你一个提示:assertEquals的正确用法是assertEquals(预期的,实际的)而不是assertEquals(实际的,预期的)

 类似资料:
  • 克拉斯托斯特。publicMethod-->classtotest.privateMethod(不是mocking)-->classtoinject.publicMethod1(想要mock) 类如下所示

  • 如何模拟返回已强制转换的模拟对象的方法。 试验方法。

  • 我编写了一个类,它读取整个文件并返回内容。

  • 我试图编写一个测试来比较字符串的相等性。 下面是应该测试的类的代码片段 这是一个测试类 正如您所看到的,我想测试公共方法,它在同一个类中调用私有方法。这个想法是,我想为私有方法创建一个模拟对象,无论何时从公共方法调用它,它都应该返回常量值 但是它返回,而不是从私有方法返回。 null

  • 我试图在测试的类中模拟一个私有方法,如下所示。 现在我需要测试方法和mock。 我尝试创建间谍的上述类,但该方法得到调用时,我这样做下面 在第二行本身被调用。而且,不会被模仿。 也许我用错误的方式创建了间谍对象?无法执行

  • 我试图模拟一个私有方法(executeGetRequest),在我声明要为私有方法返回的模拟的那一行中,私有方法实际上是用null参数执行的,因此抛出了一个NullPointerException。 VlcPlayerMinimal。爪哇: VlcPlayerMinimalTest。爪哇: 堆栈跟踪: 它似乎PowerMockito实际上是调用的方法,我试图在行PowerMockito.do返回(