Unit testing 大型机上下文中与日期相关的自动测试

Unit testing 大型机上下文中与日期相关的自动测试,unit-testing,cobol,mainframe,Unit Testing,Cobol,Mainframe,作为一个有着良好测试背景的java爱好者,我现在接触到了金融行业的大型机/cobol技术 我想要自动化测试,但了解到在我们的环境中实现它确实很困难,所以我在这里征求意见 1) 我的计划是在java中实现一个基于junit的测试驱动程序,通过存储过程、MQ或类似工具调用cobol,并检查各种DB2表中的实际结果。MPOV没有问题 2) 棘手的是上下文/数据,尤其是日期: 目前,测试是手动完成的 全局“当前日期”是一个 重要的测试参数,手动设置(影响很大 其他程序),因此在此期间,其他人不得触摸系

作为一个有着良好测试背景的java爱好者,我现在接触到了金融行业的大型机/cobol技术

我想要自动化测试,但了解到在我们的环境中实现它确实很困难,所以我在这里征求意见

1) 我的计划是在java中实现一个基于junit的测试驱动程序,通过存储过程、MQ或类似工具调用cobol,并检查各种DB2表中的实际结果。MPOV没有问题

2) 棘手的是上下文/数据,尤其是日期:

  • 目前,测试是手动完成的
  • 全局“当前日期”是一个 重要的测试参数,手动设置(影响很大 其他程序),因此在此期间,其他人不得触摸系统 测试
  • 由于测试是手动完成的,因此可以轻松跟踪全局上下文锁: 类似“2013年12月12日请勿触摸任何东西,我正在测试!”
  • 当测试实现自动化时,这种手动的“单个测试人员的全局锁定”方法就不再可能了
=>我们如何避免这种单一锁定?如何轻松合成全球当前日期或当前汇率等信息?


(目前的想法是每天、每周、每月克隆整个上下文。这样人们仍然可以锁定给定的上下文。但我根本不喜欢“锁定”或“拥有”的想法。)

这是任何自动化单元测试的一个窍门——甚至是Junit测试

答案是你必须输入日期。为生产设置包装器“读取当前日期并将其添加到参数列表”,但让单元测试调用接收日期的模块


这是防止您的测试在任何语言或环境中过时的唯一方法。

这是一个非常有趣的问题,但并不适合该网站。为了避免在“今天的约会”之前被困在肚子里,不要使用它。有一个控制文件,它将包含与当前数据日相关的所有您需要的日期。已经编码好了吗?很愚蠢,但很常见的愚蠢。单独的LPAR用于您的测试,这样就没有其他人在上面了,您可以尽情玩弄这个日期。进一步说,最好找一个大型机论坛,或者一个专门研究测试工具的论坛,而不是一个编程问答网站,就是这样。在我的linux机器上,我写了一个。这样就覆盖了c库时间(3)(和其他一些)例程。当我测试时,我会预先加载它。所以。有趣的是,它只影响我的过程。也许在你的环境中有类似的东西?@ScottNelson,如果程序员愚蠢到使用时钟日期,他们就不会以一种容易满足的方式来做。它将混合使用COBOL、PL/I、z/OS下的汇编程序、排序和任何其他方式,它们可以尽可能懒洋洋地掌握日期。如果你下到足够低的程度去获得所有的东西,你就得到了每个人,这是OP想要避免的。“不要使用它”建议适用于任何系统级属性。要在不“使用”的情况下使用它,请始终通过提供实际系统属性或测试值的包装程序访问它,具体取决于您设置的某些环境变量(或其他变量)。当然,我们可以肯定,要使现有的应用程序像这样工作需要大量的工作,因为直接访问到处都会被编码。因此@BillWoodger的建议是使当前日期可配置(我认为已经是了,因为他们手动测试银行假期、截止时间等),并提供单独的“LPAR”用于测试。IIUC,这些是行为完全相同的克隆分区。OTOH,我希望建立这些将是更大的组织任务->高成本。我希望看到一个实用的、低规模的解决方案,我可以直接在我的项目中实施,而无需对环境进行实质性的改变。做得好。不幸的是,在此期间我了解到,主框架构建者永远不会为了自动化测试这样一个荒谬的想法而以这样的方式重构代码;-)风险太高,无法打破某些东西:-)