【问题标题】:how to mock an interface using PowerMockito in Java如何在 Java 中使用 PowerMockito 模拟接口
【发布时间】:2017-06-20 12:57:21
【问题描述】:
req1(an object of request type 1)
req2(an object of request type 2)


    class response{
        public TxnResp txnResp(){ 
            TxnResp txnResp = service.txn(req1 , req2);
            return txnResp;
       }
    }

我在 junit 测试中使用 Powermockito 进行模拟。

“txn”是一个接口。我需要模拟这条线TxnResp txnResp = service.txn(req1 , req2);我的测试课。因为调用txn 会从网络服务返回一些值,这些值在下一行中指定。

txnResp 包含以下值 storeNo、retailerId 和密码。它有自己的bean类,所以我们可以设置像txnResp.setStoreId(1);这样的值

谁能帮我模拟一下上面的接口'txn'并将值返回给txnResp

最后 5 个小时我都被困在里面了。任何帮助将不胜感激。

【问题讨论】:

  • 这是什么意思:“txn”是一个接口txn 显然是service 的一个方法。你的意思是有一些接口,比如Txn,而txn是那个接口的方法
  • 是的!txn 是该接口的一个方法。

标签: java unit-testing junit mockito powermockito


【解决方案1】:

在我看来,简单的Mockito 在你的情况下就足够了。

如果service 是注入的依赖项(通过构造函数、setter 即),您可以尝试以下操作:

public class ResponseTest{

   @InjectMocks
   private Response response;

   @Mock
   private Service serviceMock;

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

   @Test
   public void test(){
        // Arrange
        TxnResp txnResp = new TxnResp(...);

        Mockito.doReturn(txnResp).when(serviceMock).txn(
           Mockito.any(ReqType1.class), Mockito.any(ReqType2.class));

       // Act and assert...      
   }
}

【讨论】:

  • 我能知道什么是“serviceMock”里面的条件吗?
  • PowerMockito.spy(Response.class); PowerMockito.doReturn(txnResp).when(Service.class, "txn",Matchers.anyObject(),Matchers.anyObject());这就是我在测试课上所做的,但它并不执行。
  • 而不是“serviceMock”,它应该只是“服务”,即@Mock'ed Service 实例
  • 是的,我的错。我倾向于使用 Mock 作为后缀来区分真正的 impls 和 mocked / stubbed 的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多