1
我是使用Mockito框架(和行为/测试驱动开发)和使用 来帮助我编码的一些东西的新;@Before注释方法解决方案中的Mockito代码
I'm编码自己的Java库,用于XML创建图形的东西, 我第一次尝试验证一些行为: (MockitoAnnotations.initMocks(Class)
在BaseTestClass
使用):
public class GeneralXml extends BaseTestClass {
private static final String TAG = "General XML";
@Mock(name="xml") private XmlGraphics mockXML;
@Before
public void setUp() throws Exception{
//stub method parseDimension
when(mockXML.parseDimension(anyString()))
.thenReturn(500);
// stub method parsePosition: 500 X 500 X 500 is an
// arbitrary dimension of window
when(mockXML.parsePosition(anyString()))
.thenReturn(
new Random().nextFloat() * mockXML.parseDimension(Xml.WIDTH),
new Random().nextFloat() * mockXML.parseDimension(Xml.HEIGHT),
new Random().nextFloat() * mockXML.parseDimension(Xml.DEPHT));
// Now Colors must have betwwen 0 and 255
// (RGB color)
when(mockXML.parseColorComponent(anyString()))
.thenReturn(
new Random().nextInt(256),
new Random().nextInt(256),
new Random().nextInt(256));
}
但我收到错误的所有后续验证,如:
@Test
public void mockPosition() {
Log.d(TAG, "mock", "x = "+mockXML.parsePosition(Xml.X));
Log.d(TAG, "mock", "y = "+mockXML.parsePosition(Xml.Y));
Log.d(TAG, "mock", "z = "+mockXML.parsePosition(Xml.Z));
verify(mockXML, times(3)).parsePosition(anyString());
}
我认为我的错误是:
when(mockXML.parsePosition(anyString()))
.thenReturn(
new Random().nextFloat() * mockXML.parseDimension(Xml.WIDTH),
new Random().nextFloat() * mockXML.parseDimension(Xml.HEIGHT),
new Random().nextFloat() * mockXML.parseDimension(Xml.DEPHT));
这不是一个有效的代码?或者我误解了一些东西? 感谢您的帮助
没有工作过,我“uninherited” – gcrav
我“uninherited” GeneralXml从BaseTestClass(即itsef有MockitoAnnotation .initMocks(this),并放在setUp()中,但没有工作; – gcrav
我有以下来自JUnit的响应:org.mockito.exceptions.misusing.UnfinishedStubbingException: 未完成的stubbing在此处检测到: - > at gml.processing。 xml.reader.test.GeneralXml.setUp(GeneralXml.java:34) Eg thenReturn ()可能会丢失。 正确存根的示例: when(mock.isOk())。thenReturn(true); when(mock.isOk())。thenThrow(exception); dothrow(exception).when(mock).someVoidMethod(); 提示: 1.遗漏然后返回() 2.尽管存根方法可能会返回嘲笑,您不能在一个thenReturn方法内部模拟创建(模拟())调用(参见问题53) – gcrav