我有一个方法:
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的方法时无法获得预期的输出所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)