MockitoPower Mockito:在android中模拟LayoutParams的方法时无法获得预期的输出

MockitoPower Mockito:在android中模拟LayoutParams的方法时无法获得预期的输出,第1张

概述我有一个方法:public class MarginConverter { int top = 0; int bottom = 0; int right = 0; int left = 0; public MarginConverter(String val){ top = bottom = right

我有一个方法:

public class marginConverter {    int top = 0;    int bottom = 0;    int right = 0;    int left = 0;     public marginConverter(String val){       top = bottom = right = left = Integer.parseInt(val);    }    public LayoutParams getLayoutParamsFromVIEw(VIEw vIEw){        LayoutParams layoutParams = (LayoutParams) vIEw.getLayoutParams();        int height,wIDth;        if (layoutParams == null) {            height = LayoutParams.WRAP_CONTENT;            wIDth = LayoutParams.MATCH_PARENT;            layoutParams = new LayoutParams(wIDth,height);            layoutParams.setmargins(left,top,right,bottom);        } else {            layoutParams.setmargins(left,bottom);        }        return layoutParams;        }    }

注意:变量left,bottom是在构造函数调用时初始化的实例变量.

我想测试一下这个方法.我已经模拟了vIEw.getLayoutParams()方法.方法setmargin(int,int,int)没有像上面提到的那样设置margin参数,我在测试中获得了LayoutParams(leftmargin,rightmargin,topmargin,bottommargin)0.0的所有参数,尽管它在代码中正常工作.我该怎么做才能获得预期的价值.

请帮我 !任何帮助将不胜感激..

这是我的testCase代码:

@RunWith(powermockrunner.class)@PrepareForTest({VIEwGroup.LayoutParams.class})public class marginConverterTest {@Mockprivate VIEw vIEw = mock(TextVIEw.class);private int left = 0;private int right = 0;private int top = 0;private int bottom = 0;@Beforepublic voID setUp() throws Exception {    when(vIEw.getLayoutParams()).thenReturn(null);}/** * tests output for margin conversion when one argument is given */@Testpublic voID test_OneArgumentmarginConversion(){    left =top = right = bottom = 5;    marginConverter marginConverter = new marginConverter("5");    LayoutParams params = marginConverter.getLayoutParamsFromVIEw(vIEw);    Object[] marginArray = new Object[4];    marginArray[0] = params.leftmargin;    marginArray[1] = params.topmargin;    marginArray[2] = params.rightmargin;    marginArray[3] = params.bottommargin;    Assert.assertArrayEquals(new Object[]{left,bottom},marginArray);}}
最佳答案你似乎对嘲弄的概念感到困惑.如果你嘲笑某事,那就意味着它是一个虚拟(不是真实的对象),它的所有方法调用都是假的.

如果你希望边距不为零,则LayoutParams(leftmargin,bottommargin)不要模拟视图或setmargin方法.

如果你的视图对象不是真实的(模拟,虚拟等),你的layoutParams也是假的(意味着未知的值),除非你通过使用一些模拟框架返回一个实际的layoutParams.

简单来说,如果你想通过调用setmargins设置边距,不要模拟setmargins方法调用并确保layoutParams不是假的.

此外,在您的情况下,如果视图被模拟,则条件if(layoutParams == null)永远不会被满足,因为layoutParams将是非null的伪对象.

解决方案 – 在调用vIEw.getLayoutParams()时使用适当的模拟方法返回适当的实际layoutParams对象,或使用null来满足两个代码分支(如果还有其他).

希望它有所帮助,让我知道我是否误解了你的问题.

总结

以上是内存溢出为你收集整理的Mockito / Power Mockito:在android中模拟LayoutParams的方法时无法获得预期的输出全部内容,希望文章能够帮你解决Mockito / Power Mockito:在android中模拟LayoutParams的方法时无法获得预期的输出所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1139344.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存