我有一台服务器,我想做自动功能测试。它需要初始化几千个总对象以在内存模型中构建它,从配置文件中获取数据,但这对于计算机来说仍然是微不足道的,并且当从eclipse运行时它几乎是瞬间启动。
当我作为junit测试的一部分运行相同的程序时,初始化阶段需要15秒左右,而不是独立应用程序的瞬时速度。没那么久,但如果我计划进行许多测试,它会加起来。
根据JVisualVM,这个时间分布在六种方法中,没有一种方法占用超过14%的CPU时间(这是在我优化了占用50%CPU的方法之后)。所有运行的方法都是我希望看到运行的方法,并且似乎占用了总CPU时间的合理百分比;我无法将它与实时服务器进行比较,因为实时服务器初始化速度如此之快,我无法启动和停止JVisualVM足够快速地对其进行分析。看起来好像我的所有对象的init方法可能需要更长的时间,例如一个对象使用3%的cpu进行初始化,但是自我时间为000毫秒并且不进行其他调用;但我不知道这是否是使用JVisualVM的常见结果?
虽然在我的Junit和独立应用程序中运行时,我的做法不一样;我正在使用serverMock对象(虽然它几乎不是模拟ATM)。它扩展了我的服务器对象。现在,扩展它的唯一原因是因为服务器的run方法(无限期地运行等待传入消息)是一个受保护的方法,当服务器作为jar运行时,main()方法调用该方法。我的模拟添加了一个方法,它将生成一个线程来运行服务器的run方法,因为我没有其他方法在单元测试中启动该方法。但是,减速是在服务器初始化之前进入run方法;所以我不认为这是放缓的原因?