Рассмотрим типичный тестовый запуск 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
|
@Injectprivate Injector injector;@Injectprivate LifecycleManager lifecycleManager; |
Если это вас интересует, больше образцов на сайте проекта здесь .
| Ссылка: | Тестирование губернатора Netflix — Представление губернатора-бегуна от нашего партнера по JCG Биджу Кунджуммена в блоге « Все и вся» . |