加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 02:54:20 所属栏目:Java 来源:网络整理
导读:我尝试使用Mockito来模拟数据库池(仅用于检索数据),但是当运行在一段时间内检索到许多模拟连接的性能测试时,它会耗尽内存. 这是一个简化的自包含代码,它在我的机器上进行大约150,000次循环迭代后抛出OutOfMemoryError(尽管似乎没有任何东西可以全局保存,并且
我尝试使用Mockito来模拟数据库池(仅用于检索数据),但是当运行在一段时间内检索到许多模拟连接的性能测试时,它会耗尽内存.

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

import static org.mockito.Mockito.when;

import java.sql.Connection;

import org.mockito.Mock;
import org.mockito.MockitoAnnotations;

public class Test1 {

    static class DbPool {
        public Connection getConnection() {return null;}
    }

    @Mock
    private DbPool dbPool;

    @Mock
    private Connection connection;

    public Test1() {
        MockitoAnnotations.initMocks(this);
        when(dbPool.getConnection()).thenReturn(connection);

        for(int i=0;i<1000000;i++) {
            dbPool.getConnection();
            System.out.println(i);
        }
    }

    public static void main(String s[]) {       
        new Test1();
    }
}

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读