2011-09-27 88 views
2

我有以下代码获取的Mockito以及Powermock抛出错误正确

@PrepareForTest({Mongo.class, XYMongo.class, DB.class}) 
public class XYMongoTest extends UnitTest{ 

String host = Play.configuration.getProperty("mongo.host"); 
int port = Integer.parseInt(Play.configuration.getProperty("mongo.port")); 
String name = Play.configuration.getProperty("mongo.name"); 

@Test 
public void testRetrieveMongoDBSuccessful() throws UnknownHostException, MongoException, Exception 
{ 
    Mongo mongoMock = mock(Mongo.class); 
    DB mockDB = mock(DB.class); 

    PowerMockito.whenNew(Mongo.class).withArguments(host, port).thenReturn(mongoMock); 

    when(mongoMock.getDB(name)).thenReturn(mockDB); 

    XYMongo.getMongoDB(); 

    verify(mongoMock.getDB(name)); 
} 


@Test 
public void testRetrieveMongoDBFailUnkownHost() throws Exception 
{ 
    try 
    { 

     PowerMockito.mockStatic(Mongo.class); 

     PowerMockito.whenNew(Mongo.class).withArguments(host, port).thenThrow(new UnknownHostException("Test Exception")); 

     XYMongo.getMongoDB(); 

     PowerMockito.verifyNew(Mongo.class).withArguments(host, port); 
    } 
    catch (Exception e) 
    { 
     assertEquals("Test Exception", e.getMessage()); 
    } 
}} 

第一测试通过精细和第二失败测试误差是

失败,预期:< [试验异常] >但是:< [在这里缺少验证(模拟)的方法调用: - >在org.powermock.api.mockito.internal.invocationcontrol.MockitoNewInvocationControl.expectSubstitutionLogic(MockitoNewInvocationControl.java:65)正确验证的示例:verify(mock) .doSomething()另外,这个错误可能会显示出来,因为您验证了以下任一项:f inal/private/equals()/ hashCode()方法。那些方法不能被钉住/验证。 ]>

有关如何解决此问题的任何想法?尝试了我能想到的一切。

感谢

保罗

回答

3

错误实际上是从testRetrieveMongoDBSuccessful()来;它看起来像你有verify()不完全正确,但Mockito不能告诉你,直到下一个时间你与它进行交互。

尝试用替换的testRetrieveMongoDBSuccessful()最后一行:

verify(mongoMock).getDB("name");

相关问题