Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于多模块项目测试的Gemfire Junit花费的时间太长_Gemfire_Spring Data Gemfire - Fatal编程技术网

用于多模块项目测试的Gemfire Junit花费的时间太长

用于多模块项目测试的Gemfire Junit花费的时间太长,gemfire,spring-data-gemfire,Gemfire,Spring Data Gemfire,我有一个由几个模块组成的项目,每个模块包含它的区域和存储库类 问题是,每个模块在自己的spring上下文上都有自己的Gemfiregfe:cache 所以我的问题是,当我运行我的mvn测试时,每个模块启动它自己的Gemfire,并在测试后关闭它,这使得我的测试运行几乎需要10分钟,Gemfire的每个实例需要40秒才能启动 所以我想知道避免这种情况的最好方法是什么 我在考虑让父模块(保存所有存储库和区域)保存并创建区域,然后使用子模块上的查找来使用它们。但是我还需要单独的模块由themsleve

我有一个由几个模块组成的项目,每个模块包含它的区域和存储库类

问题是,每个模块在自己的spring上下文上都有自己的Gemfire
gfe:cache

所以我的问题是,当我运行我的
mvn测试时,每个模块启动它自己的Gemfire,并在测试后关闭它,这使得我的测试运行几乎需要10分钟,Gemfire的每个实例需要40秒才能启动

所以我想知道避免这种情况的最好方法是什么

我在考虑让父模块(保存所有存储库和区域)保存并创建区域,然后使用子模块上的查找来使用它们。但是我还需要单独的模块由themsleves运行,以防我只想运行其中一个模块测试

有没有一种方法可以使用lookup并在失败时使用相同的区域lookedup创建缓存?或者让缓存创建一次(第一次测试),并在其他上下文启动而不是关闭时将区域添加到缓存中


感谢

在某些情况下,您无法避免它,特别是如果您弄脏了Spring上下文或GemFire实例,导致在测试套件中运行后续测试时发生冲突

也就是说,在您编写的每个新测试类和/或测试用例中管理隔离/分离可能需要做更多的工作,必须跟踪哪些测试涉及哪些测试(例如,区域),而不是可能只是按照每个测试类(或者在更坏的情况下,按照每个测试用例)重新启动GemFire实例。例如,设想一个OQL查询由于以前的测试操作或类似的性质而引入意外结果

SpringDataGemFire测试套件非常相似,它启动GemFire实例并停止它们,无论是针对每个测试用例,还是在大多数情况下针对每个测试类。整个带测试的构建(900多个测试)在大约15分钟内在avg上运行。GemFire自己的测试套件(单元+集成/分布式测试等)运行时间约为8-12小时,具体取决于测试“并行化”的效率

我坚信10分钟的构建,但GemFire是一个复杂的野兽,编写测试,尤其是分布式测试,实际上需要仔细规划

Spring Data GemFire中的大多数测试都是对等缓存应用程序(例如,测试JVM嵌入了GemFire实例,并且与之关联)

我发现,如果设置一些GemFire属性(例如将日志级别设置为“警告”,特别是将mcast端口设置为0),则可以大幅减少运行时。将mcast端口设置为0将设置一个“loner”GemFire节点,并大大缩短启动时间

还有其他Spring数据GemFire测试,它们是“ClientCaches”,甚至可以生成一个带有GemFire服务器进程的单独JVM来测试客户机/服务器交互。你可以想象那些需要更长的时间来启动/停止,事实上他们确实如此。例如,和关联的Spring上下文配置文件。。。()当然还有()。注意,本例中的测试是GemFire ClientCache VM

现在,您可以在某些测试中使用模拟。许多Spring数据GemFire测试使用包中提供的模拟来模拟SDG和GemFire之间的交互

SDG中使用mock的测试类声明了一种特殊的Spring ApplicationContextInitializer,如中所述,它使用SDG。然而,真正的魔力在于它。如果你把代码通读一遍,你就会明白了

随着时间的推移,我希望将这些模拟形式化一点,并使用这些模拟创建一个单独的项目,即GemFireTestApplicationContextInitializer和相关的GemfireTestBeanPostProcessor,用于开发人员测试Spring和GemFire(以及ApacheGeode)

希望这能给您一些想法,以减轻测试设置和运行时的痛苦


干杯

在某些情况下,您无法避免它,特别是如果您弄脏了Spring上下文或GemFire实例,导致在测试套件中运行后续测试时发生冲突

也就是说,在您编写的每个新测试类和/或测试用例中管理隔离/分离可能需要做更多的工作,必须跟踪哪些测试涉及哪些测试(例如,区域),而不是可能只是按照每个测试类(或者在更坏的情况下,按照每个测试用例)重新启动GemFire实例。例如,设想一个OQL查询由于以前的测试操作或类似的性质而引入意外结果

SpringDataGemFire测试套件非常相似,它启动GemFire实例并停止它们,无论是针对每个测试用例,还是在大多数情况下针对每个测试类。整个带测试的构建(900多个测试)在大约15分钟内在avg上运行。GemFire自己的测试套件(单元+集成/分布式测试等)运行时间约为8-12小时,具体取决于测试“并行化”的效率

我坚信10分钟的构建,但GemFire是一个复杂的野兽,编写测试,尤其是分布式测试,实际上需要仔细规划

Spring Data GemFire中的大多数测试都是对等缓存应用程序(例如,测试JVM嵌入了GemFire实例,并且与之关联)

我发现,如果设置一些GemFire属性(例如将日志级别设置为“警告”,特别是将mcast端口设置为0),则可以大幅减少运行时。将mcast端口设置为0将设置一个“loner”GemFire节点,并大大缩短启动时间

还有其他Spring数据GemFire测试,它们是“ClientCaches”,甚至可以生成一个带有GemFire服务器进程的单独JVM来测试客户机/服务器交互。你可以想象那些需要更长的时间来启动/停止,事实上他们确实如此。例如,和关联的Spring上下文配置文件。。。