Недавно я много работал с проектом с использованием JBoss Drools . Я не эксперт Drools — я также не очень убежден в этой структуре или, может быть, только в конкретном случае использования в этом проекте — и мне было довольно сложно писать простые, поддерживаемые модульные тесты для бизнес-правил на основе Drools.
Так родился junit-drools — простая вспомогательная библиотека, позволяющая вам писать тесты Drools без добавления большого количества стандартного кода (как вы можете найти в примерах Drools JBoss Rules 5.X Руководство разработчика ).
Установка
Добавьте репозиторий Maven и зависимость к вашему pom.xml:
1
2
3
4
|
<repository> <id>maciejwalkowiak.pl</id> <url>https: //github.com/maciejwalkowiak/maven-repo/raw/releases/</url> </repository> |
1
2
3
4
5
6
|
< dependency > < groupId >pl.maciejwalkowiak</ groupId > < artifactId >junit-drools</ artifactId > < version >1.0</ version > < scope >test</ scope > </ dependency > |
использование
junit-drools предоставляет класс DroolsJUnitRunner, который обрабатывает большую часть стандартного кода, который необходимо написать для настройки базы знаний и сеанса Drools.
Давайте рассмотрим следующий пример:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
@RunWith (DroolsJUnitRunner. class ) @DroolsFiles (value = "helloworld.drl" , location = "/drl/" ) public class AppTest { @DroolsSession StatefulSession session; @Test public void should_set_discount() { Purchase purchase = new Purchase( new Customer( 17 )); session.insert(purchase); session.fireAllRules(); assertTrue(purchase.getTicket().hasDiscount()); } @Test public void should_not_set_discount() { Purchase purchase = new Purchase( new Customer( 22 )); session.insert(purchase); session.fireAllRules(); assertFalse(purchase.getTicket().hasDiscount()); } } |
- @RunWith (DroolsJUnitRunner) — запускает JUnit для проверки правил слюны
- @DroolsFiles — установить местоположение файлов drl (может быть одним или несколькими) — файлы drl должны быть в пути к классам — @ DroolsFiles # местоположение относительно
src/test/resources
илиsrc/main/resources
- @DroolsSession — автоматически вводит сессию Drools в ваш тест перед выполнением
Найдите полный пример с файлом drl в каталоге src / test проекта на Github.
Если вы не хотите использовать DroolsJUnitRunner, например, потому что вы уже хотите использовать Mockito или Spring runner, вы можете инициализировать объекты Drools в методе @Before:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
|
@DroolsFiles (value = "helloworld.drl" , location = "/drl/" ) public class BeforeMethodBasedTest { @DroolsSession StatefulSession session; @Before public void initDrools() throws Exception { new DroolsInjector().initDrools( this ); } @Test public void should_set_discount() { Purchase purchase = new Purchase( new Customer( 17 )); session.insert(purchase); session.fireAllRules(); assertTrue(purchase.getTicket().hasDiscount()); } } |
Я не очень разбираюсь в Drools, поэтому библиотека фактически делает то, что было нужно в проекте, с которым я работал. Вы можете добавить свои улучшения, отправив запросы на извлечение в проект Github .