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