利用Excel或LibreOffice的业务输入进行单元测试约束
業(yè)務專家向我們(開發(fā)人員)解釋業(yè)務限制。 但是,如何確保我們正確理解它們呢? 或更糟糕的是,一旦約束條件正式化,我們?nèi)绾螠y試他們之間是否同意?
好吧,有一種很棒的方法可以做到這一點:由*.xlsx數(shù)據(jù)填充的JUnit測試。 我們允許他們在Excel / LibreOffice中重新創(chuàng)建解決方案的一小部分,并讓他們決定匹配多少個約束。 然后,我們的JUnit測試將檢查我們的約束實現(xiàn)是否符合那些要求。
傳統(tǒng)單元測試
在“ 會議安排”??示例中 ,要測試會議室沖突約束(在重疊的時隙中,同一會議室中每對講話對的硬性懲罰),請輸入:
@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); }為了測試會議室沖突,您需要初始化兩個對話,三個時隙和一個會議室。 但是,對于這樣一個簡單的單元測試,前面的代碼片段太長了,大多數(shù)樣板代碼都是用于初始化會議解決方案的必填字段,而您不需要進行單元測試,因此您必須為每個單元進行一次測試。 對于更復雜的約束,編寫傳統(tǒng)的單元測試及其原因變得太麻煩了。
為了避免初始化不需要的字段,您可以利用ConferenceSchedulingXlsxFileIO為您初始化它們,并僅在該測試或同一電子表格中的其他測試中編寫您使用的內(nèi)容。
要使用xlsx文件測試會議室沖突,請創(chuàng)建三個時隙,兩個對話和一個會議室:
初始化必填字段后,為每個約束的每次得分驗證創(chuàng)建一個單獨的表。 例如,以下兩張紙檢查房間沖突約束:
在每個測試表(藍色)中,指定約束條件包,約束條件名稱,當前測試方案的描述和預期分數(shù)。 然后將對話分配給房間和時隙以使其可視化。 請注意,您無需列出在“時隙和房間”工作表中聲明的所有時隙和房間。
結(jié)論
與使用代碼編寫單元測試不同,業(yè)務專家可以指定他們希望如何在Excel / LibreOffice文件中匹配約束。 然后,開發(fā)人員實施約束以通過這些測試。 這提供了開發(fā)人員和領(lǐng)域?qū)<抑g更有效的通信方式。
要測試xlsx文件中的評分規(guī)則:
相關(guān)資料
使用OptaPlanner安排蘇黎世Voxxed Days 2018
翻譯自: https://www.javacodegeeks.com/2018/08/unit-testing-constraints-business-input.html
總結(jié)
以上是生活随笔為你收集整理的利用Excel或LibreOffice的业务输入进行单元测试约束的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 不畏艰险的意思 不畏艰险的含义
- 下一篇: 唱歌用英语怎么读 唱歌的英语是什么