【问题标题】:Junit Test (Mockito, PowerMock) a class with void method and private valueJunit Test (Mockito, PowerMock) 一个带有void方法和私有值的类
【发布时间】:2019-10-25 22:34:42
【问题描述】:

一些示例代码,例如: (我只是添加了更多细节)

 public class A {
      @Autowired
      private Data data;

      @RequestMapping(value="/Boo", method = RequestMethod.GET)
      public void Boo(){        
        data.someMethod();       
  } 
}

我想测试 someMethod() 是否运行。

我尝试过@First 答案,但收到如下错误消息:

java.lang.AbstractMethodError: org.powermock.api.mockito.internal.exceptions.StackTraceCleanerProvider$1.isIn(Ljava/lang/StackTraceElement;)Z
    at org.mockito.internal.exceptions.stacktrace.StackTraceFilter.filter(StackTraceFilter.java:33)
    at org.mockito.internal.exceptions.stacktrace.ConditionalStackTraceFilter.filter(ConditionalStackTraceFilter.java:23)
    at org.mockito.exceptions.base.MockitoException.filterStackTrace(MockitoException.java:44)

【问题讨论】:

标签: junit mockito powermock


【解决方案1】:
@RunWith(MockitoJUnitRunner.class)
public class ATest {

    @InjectMocks
    private A a;

    @Spy
    private Data data;

    @Test
    public void test() {
        // execute
        this.a.Boo();

        // verify
        Mockito.verify(this.data).someMethod();
    }

}

【讨论】:

  • a 上不需要spy。这也只是验证someMethod() 被调用,它实际上不是run,因为OP 已经制定了它。但我认为这是正确的答案。
  • @second,谢谢。 \@InjectMock 注释应该单独使用,确实。作为在 Data 实例上运行真实方法的一种方式,我们可以将其定义为 Spy。但这也意味着我们将逻辑置于其他类的责任之下,这对于单元测试来说并不理想。
  • 谢谢,何塞。但这似乎对我不起作用。我收到如下错误消息:
猜你喜欢
  • 2021-01-16
  • 1970-01-01
  • 1970-01-01
  • 2014-09-21
  • 1970-01-01
  • 1970-01-01
  • 2013-07-17
  • 1970-01-01
  • 2018-12-04
相关资源
最近更新 更多