java – Mockito在一个简单的测试中抛出一个OutOfMemoryError

前端之家收集整理的这篇文章主要介绍了java – Mockito在一个简单的测试中抛出一个OutOfMemoryError前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我尝试使用Mockito来模拟数据库池(仅用于检索数据),但是当运行在一段时间内检索到许多模拟连接的性能测试时,它会耗尽内存.

这是一个简化的自包含代码,它在我的机器上进行大约150,000次循环迭代后抛出OutOfMemoryError(尽管似乎没有任何东西可以全局保存,并且一切都应该是垃圾可收集的).我究竟做错了什么?

  1. import static org.mockito.Mockito.when;
  2.  
  3. import java.sql.Connection;
  4.  
  5. import org.mockito.Mock;
  6. import org.mockito.MockitoAnnotations;
  7.  
  8. public class Test1 {
  9.  
  10. static class DbPool {
  11. public Connection getConnection() {return null;}
  12. }
  13.  
  14. @Mock
  15. private DbPool dbPool;
  16.  
  17. @Mock
  18. private Connection connection;
  19.  
  20. public Test1() {
  21. MockitoAnnotations.initMocks(this);
  22. when(dbPool.getConnection()).thenReturn(connection);
  23.  
  24. for(int i=0;i<1000000;i++) {
  25. dbPool.getConnection();
  26. System.out.println(i);
  27. }
  28. }
  29.  
  30. public static void main(String s[]) {
  31. new Test1();
  32. }
  33. }

解决方法@H_301_8@
问题是模拟对象正在记住每次调用的细节,以防您希望稍后进行验证.最终,它将不可避免地耗尽内存.您需要做的是偶尔重置模拟,使用Mockito.reset静态方法,并再次存根您的方法.不幸的是,如果没有重置存根,就无法清除模拟的验证信息.

此问题在https://code.google.com/p/mockito/issues/detail?id=84中详细介绍

猜你在找的Java相关文章