Рассмотрим типичный тестовый запуск Netflix Governator .
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
|
public class SampleWithGovernatorJunitSupportTest { @Rule public LifecycleTester tester = new LifecycleTester(); @Test public void testExampleBeanInjection() throws Exception { tester.start(); Injector injector = tester .builder() .withBootstrapModule( new SampleBootstrapModule()) .withModuleClass(SampleModule. class ) .usingBasePackages( "sample.gov" ) .build() .createInjector(); BlogService blogService = injector.getInstance(BlogService. class ); assertThat(blogService.get(1l), is(notNullValue())); assertThat(blogService.getBlogServiceName(), equalTo( "Test Blog Service" )); } } |
В этом тесте используется поддержка правил Junit, предоставляемая Netflix Governator, и тестируются некоторые наборы функций регулятора — модули Bootstrap, сканирование пакетов, поддержка конфигурации и т. Д.
Тест, однако, содержит довольно много стандартного кода, который, я чувствовал, можно было бы уменьшить, используя вместо этого модель типа Junit Runner . В качестве доказательства этой концепции я представляю проект с невообразимым именем — регулятор-юнит-бегун , рассмотрим теперь тот же тест, переписанный с использованием этой библиотеки:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
@RunWith (GovernatorJunit4Runner. class ) @LifecycleInjectorParams (modules = SampleModule. class , bootstrapModule = SampleBootstrapModule. class , scannedPackages = "sample.gov" ) public class SampleGovernatorRunnerTest { @Inject private BlogService blogService; @Test public void testExampleBeanInjection() throws Exception { assertNotNull(blogService.get(1l)); assertEquals( "Test Blog Service" , blogService.getBlogServiceName()); } } |
Большая часть шаблона теперь реализована в средстве запуска Junit, а параметры, необходимые для начальной загрузки регулятора, передаются через аннотацию LifecycleInjectorParams. Сам тестовый экземпляр является связанным компонентом и, следовательно, может быть внедрен в него, таким образом, экземпляры, которые должны быть протестированы, могут быть внедрены в сам тест и подтверждены. Если вы хотите более детализированный контроль, сам LifecycleManager может быть введен в тест !:
1
2
3
4
5
|
@Inject private Injector injector; @Inject private LifecycleManager lifecycleManager; |
Если это вас интересует, больше образцов на сайте проекта здесь .
Ссылка: | Тестирование губернатора Netflix — Представление губернатора-бегуна от нашего партнера по JCG Биджу Кунджуммена в блоге « Все и вся» . |