【问题标题】:Mocking only specific code line inside whole method在整个方法中仅模拟特定的代码行
【发布时间】:2017-06-05 03:07:02
【问题描述】:

我有想要测试方法的代码,但只模拟该方法中的特定部分,例如,我想调用 doNetworkWork 并完全执行它,并且只返回调用时的特定行为: mRestPR.callNetwork(restCall) 所以如果在通话之前会有一些问题,我希望它成功/失败。

  @Test
    public void testMethod () {
        Services sr = new Services ();
        sr.doNetworkWork(new CallackService() {
               @Override
                public void onComplete(String response ){
                //do some work
    }});
   }

Services.java

public void doNetworkWork (CallackService  callback) {

    RestCall restCall = new RestCall (RestMethodType.POST, uri, ADD_77, new 
    RestCall.RestCallListener() {
            @Override
            public void onComplete(Response response) {
                if (callback != null) {
                    callback.onComplete(response.getMessage());
                }
            }
        });

             // some work
             // mRestPR – private member
            mRestPR.callNetwork(restCall);
    }

【问题讨论】:

  • 在我看来你想模拟 mRestPR 和存根 callNetwork
  • 那是正确的,由于某种原因,当我试图模拟它时,如果 mRestPR 方法中的其他调用之一失败
  • 好吧,你还没有真正展示足够的代码来帮助任何人找出原因。您如何设置您的模拟,以及如何将其注入您正在测试的对象中?
  • 没有显示代码?那么我添加了什么?我不使用模型,我使用Robolectirc - 这让我有可能创建对象并正常使用它,这是我的问题,如何在测试方法中“注入”特定行为作为私有成员 - @987654330 @

标签: java unit-testing mocking mockito robolectric


【解决方案1】:

我发现很多时候当你陷入困境时,这是一个设计缺陷。在这种情况下,doNetworkNow 方法可能属于一个单独的对象,然后您就可以正常 Mock。

我不能确定,因为你没有提供足够的代码让我给出好的建议。

【讨论】:

    猜你喜欢
    • 2011-05-17
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 2011-02-02
    相关资源
    最近更新 更多