2011-08-24 33 views
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)); 

这不是一个有效的代码?或者我误解了一些东西? 感谢您的帮助

回答

1

尝试添加这是你的设置中的第一行()函数:

MockitoAnnotations.initMocks(this); 
+0

没有工作过,我“uninherited” – gcrav

+0

我“uninherited” GeneralXml从BaseTestClass(即itsef有MockitoAnnotation .initMocks(this),并放在setUp()中,但没有工作; – gcrav

+0

我有以下来自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