libreoffice

业务专家向我们(开发人员)解释业务限制。 但是,如何确保我们正确理解它们呢? 或更糟糕的是,一旦约束条件正式化,我们如何测试他们之间是否同意?

好吧,有一种很棒的方法可以做到:用*.xlsx数据填充的JUnit测试。 我们允许他们在Excel / LibreOffice中重新创建解决方案的一小部分,并让他们决定匹配多少个约束。 然后,我们的JUnit测试将检查我们的约束实现是否符合那些要求。

传统单元测试

在“ 会议安排”​​示例中 ,要测试会议室冲突约束(在重叠的时隙中,同一会议室中每对讲话对的硬性惩罚),请输入:

@Test
public void roomConflict() {TalkType talkType = new TalkType(0L, "type1");Talk talk1 = new Talk(1L).withTalkType(talkType).withSpeakerList(Collections.emptyList()).withRequiredRoomTagSet(Collections.emptySet())...Talk talk2 = new Talk(2L)...LocalDateTime start1 = LocalDateTime.of(2018, 1, 1, 9, 0);LocalDateTime end1 = LocalDateTime.of(2018, 1, 1, 10, 0);LocalDateTime start2 = LocalDateTime.of(2018, 1, 1, 9, 30);LocalDateTime end2 = LocalDateTime.of(2018, 1, 1, 10, 30);LocalDateTime start3 = LocalDateTime.of(2018, 1, 1, 10, 0);LocalDateTime end3 = LocalDateTime.of(2018, 1, 1, 11, 0);Timeslot slot1 = new Timeslot(1L).withTalkTypeSet(Collections.singleton(talkType)).withStartDateTime(start1).withEndDateTime(end1);Timeslot slot2 = new Timeslot(2L)...Timeslot slot3 = new Timeslot(3L)...Room room1 = new Room(1L).withTalkTypeSet(Collections.singleton(talkType)).withUnavailableTimeslotSet(Collections.emptySet());ConferenceSolution solution = new ConferenceSolution(1L).withTalkTypeList(Collections.singletonList(talkType))...scoreVerifier.assertHardWeight(ROOM_CONFLICT, 0, solution);// Talks in same room without overlapping time slotstalk1.withRoom(room1).withTimeslot(slot1);talk2.withRoom(room1).withTimeslot(slot3);scoreVerifier.assertHardWeight(ROOM_CONFLICT, 0, solution);// Talks in same room with overlapping time slotstalk2.withTimeslot(slot2);scoreVerifier.assertHardWeight(ROOM_CONFLICT, -10, solution);
}

为了测试会议室冲突,您需要初始化两个对话,三个时隙和一个会议室。 但是,对于这样一个简单的单元测试,前面的代码片段太长了,大多数样板代码都是用于初始化会议解决方案的必填字段,而您不需要进行单元测试,因此您必须为每个单元进行一次测试。 对于更复杂的约束,编写传统的单元测试及其原因变得太麻烦了。

为了避免初始化不需要的字段,您可以利用ConferenceSchedulingXlsxFileIO为您初始化它们,并仅在该测试或同一电子表格中的其他测试中编写您使用的内容。

要使用xlsx文件测试会议室冲突,请创建三个时隙,两个对话和一个会议室:

初始化必填字段后,为每个约束的每次得分验证创建一个单独的表。 例如,以下两张纸检查房间冲突约束:

在每个测试表(蓝色)中,指定约束包,约束名称,当前测试方案的描述和预期分数。 然后将对话分配给房间和时隙以使其可视化。 请注意,您无需列出在“时隙和房间”工作表中声明的所有时隙和房间。

结论

与使用代码编写单元测试不同,业务专家可以指定他们希望如何在Excel / LibreOffice文件中匹配约束。 然后,开发人员实施约束以通过这些测试。 这提供了开发人员和领域专家之间更有效的沟通方式。

要测试xlsx文件中的评分规则:

  1. 在设置表中列出测试的所有必填字段。
  2. 对于每个分数验证,请创建一个单独的蓝色测试表,其中包含约束包,约束名称和预期分数。
  3. 仅列出要用于相应规则的字段。
  4. 在ConferenceSchedulingScoreRulesXlsxTest中设置testFileName并运行测试文件。

相关资料

使用OptaPlanner安排苏黎世Voxxed Days 2018

翻译自: https://www.javacodegeeks.com/2018/08/unit-testing-constraints-business-input.html

libreoffice

libreoffice_利用Excel或LibreOffice的业务输入进行单元测试约束相关推荐

  1. 利用Excel或LibreOffice的业务输入进行单元测试约束

    业务专家向我们(开发人员)解释业务限制. 但是,如何确保我们正确理解它们呢? 或更糟糕的是,一旦约束条件正式化,我们如何测试他们之间是否同意? 好吧,有一种很棒的方法可以做到这一点:由*.xlsx数据 ...

  2. excel日历弄到html,如何在Excel中利用日历控件来快速输入日期

    给大家分享了一个利用日历控件在Excel单元格中输入日期的小窍门.大家知道,物流和会计行业的报表,经常需要手工输入一些日期,例如发货日期,在途时间.到达配送中心日期.签收日期等,如果手工输入,难免出错 ...

  3. b样条曲面绘制 opengl_CAD制图软件中如何利用EXCEL输入坐标绘制曲线?

    当在使用浩辰CAD制图软件绘制图纸的过程中,经常要绘制由多个坐标点连接成的曲线时,有什么方便快捷的方法吗?那当然是有的.利用EXCEL表格保存数据并与CAD制图软件巧妙地结合起来,就能很容易地画出曲线 ...

  4. python输入随机的口算算式_小学生家长的福利来啦--利用EXCEL随机生成口算题目...

    原标题:小学生家长的福利来啦--利用EXCEL随机生成口算题目 刚上一年级或者二年级的家长都会有这样的一个纠结:数学老师布置作业,要求家长给小孩出口算题目,并批阅.辛辛苦苦想了好久,总算把题目出完了, ...

  5. wps 模拟分析 规划求解_【网友来稿】利用Excel求解线性规划问题

    点击上方"运筹学小将",和小将一起学习运筹学把 提问 Qustions 解答 Answers 01 网友分享历年真题到公众号后台有现金收入吗? 没有. 02 分享历年真题到公众号后 ...

  6. 一个excel文档里复制黏贴另外表单跟着变动_利用Excel连接Power BI,实现PPT报告自动输出...

    ​文/HALI就职于汽车行业战略部门 专注汽车市场信息情报收集和分析 因为工作需要,每月周期性的更新数据和撰写PPT 报告成为繁重的劳动.结果是很多时间花费在数据处理上,真正的分析工作,往往只能草草收 ...

  7. excel和python建模_利用Excel学习Python:准备篇

    写在前面 这个系列我们要利用Excel的知识,学会用python进行数据分析,如果你精通Excel想要用python提高数据分析效率,那么这个系列你来对了,如果你已经是python大神,想要建模/算法 ...

  8. 利用Excel动态图表----------使用offset(),match()多种控件,实现筛选作图

    实现利用Excel进行可视化动态分析. 如果想要进行实操,可从网盘中提取数据: 链接:https://pan.baidu.com/s/1rV_Cfx7kZqQvB7PzMqYHYA  提取码:aykp ...

  9. 利用Excel可视化分析,柱形图、条形图、饼图、复合饼图,圆环图、组合图、漏斗图、地图的操作方法(适合小白)

    今天收获满满,感觉学习到许多,进行归纳,整理利用Excel进行可视化分析. 如果想要进行实操,可以自己从网盘中提取数据 链接:https://pan.baidu.com/s/1xus3KRlXvLXo ...

最新文章

  1. indesign图片规定在左下角_详解InDesign基本使用方法
  2. php 的webservice类库NuSoap介绍
  3. MongoDB之副本集
  4. Python爬虫不会?戳一下,小编一步步教你写一个简单的爬虫
  5. Spring原理之代理与动态代理模式总结(四)
  6. oppo刷机工具_黔隆科技刷机教程OPPOR9TM忘记密码免刷机保资料解屏幕锁教程
  7. Startup Script for Python(x,y)
  8. java web 房屋租赁系统
  9. 公司年会不知道送什么?2021平价高颜值蓝牙耳机推荐
  10. PM-项目管理(Project Management)
  11. CF446C DZY Loves Fibonacci Numbers 万能的线段树
  12. 盗版不需要考虑,直接企业版(Enterprise)走起?
  13. 【Ubuntu】安装企业微信(Wine)
  14. 如果只想推广俄语语言市场该如何利用谷歌?
  15. 不降价的促销利器--让渡营销
  16. 数据规整:连接、联合与重塑(数据分析)
  17. 利用gensim里word2vec训练实例——分析三国里人物关系
  18. Arduino重置-复位
  19. uniapp中onShow比onLoad先渲染数据
  20. 关于hiktool已失效的处理及一台无法初始化的海康录像机的修复

热门文章

  1. 201612-5 卡牌游戏
  2. P7518-[省选联考2021A/B卷]宝石【主席树,二分】
  3. P6773-[NOI2020]命运【线段树合并,树形dp】
  4. nssl1488-上升子序列【贪心,dp】
  5. 牛客小白月赛17-记录(附题解)
  6. nssl1196-摘果子【树形依赖背包,dp】
  7. nssl1192-加密【字符串hash】
  8. HDU5322 - cdq分治FFT加速dp
  9. Java IO: 序列化与ObjectInputStream、ObjectOutputStream
  10. jsoup解析HTML用法小结