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

无法使用power mockito模拟另一个类的公共方法

宇文和同
2023-03-14

我正在使用PowerMockito为一个类编写junit。我可以模拟私有方法,但无法模拟另一个类的公共方法。在下面的测试类中,B的对象没有被模仿。我做错了什么?

 class A {
  
  B b = new B();
  
  public String handleData() {
    String parameter = getParameter();
    String data = b.getData();
    .....
 }
  
  private String getParameter(){
    .......
    .....
  }
}

另一个具有所有公共方法的类B

class B {
  public String getData() {
  .......
  .....
  }
}

现在我有A班的考级

@PowerMockIgnore("javax.management.*")
@RunWith(PowerMockRunner.class)
@PrepareForTest(fullyQualifiedNames = "org.example.A")
class TestA {
  @Mock
  B b;

  @Before
  public void setUp() {
    MockitoAnnotations.initMocks(this);
  }

  @Test
  public void handleDataTest()

   A a = spy(new A());
   doReturn("test").when(a, "getParameter");
   >>>>>  when(b.getData().thenReturn("test);
   .........
   .....
   AssertNotNull(a.handleData());
}

下面是我使用的依赖关系-

<dependency>
  <groupId>org.powermock</groupId>
  <artifactId>powermock-module-junit4</artifactId>
  <version>2.0.0-beta.5</version>
  <scope>test</scope>
</dependency>

<dependency>
  <groupId>org.powermock</groupId>
  <artifactId>powermock-api-mockito2</artifactId>
  <version>2.0.0-beta.5</version>
  <scope>test</scope>
</dependency>

<!-- https://mvnrepository.com/artifact/org.mockito/mockito-core -->
<dependency>
  <groupId>org.mockito</groupId>
  <artifactId>mockito-core</artifactId>
  <version>2.13.0</version>
  <scope>test</scope>
</dependency>

共有1个答案

暴阳州
2023-03-14

B b=new B();每当A的对象被创建时,都会在对象A中创建B的新实例。只有当B以某种方式被注入对象A时,B的实例才能被模拟。

 类似资料:
  • 我试图使用PowerMockito在我正在测试的代码中模拟java.net.URL类的创建。基本上,我希望防止真正的HTTP请求发生,而是1)在请求发出时检查数据,2)在模拟响应中提供我自己的测试数据。这就是我正在尝试的: 我要测试的代码如下所示: 在前面的测试场景中,我模拟了wlInvokeUrlString以匹配“MyURLString”。我还尝试使用whenNew行的各种其他形式,尝试注入模

  • 有人能帮帮我吗?提前谢了。

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

  • 其中authUser()定义为final,如下所示: 我正在学习如何使用PowerMock模拟非静态方法,以及Powermockito是否可以模拟非final具体类中的final方法?。我尝试了一些变体,例如使用Mockito而不是PowerMock来存根authUser,以及将apiclientconnection.class添加到PrepareForTest注释中。我不明白为什么它不起作用。我