Статьи

Netflix Governator Tests — Представляем регулятор-юнит-бегун

Рассмотрим типичный тестовый запуск 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;

Если это вас интересует, больше образцов на сайте проекта здесь .