AEM Mocks: не удается ввести конфигурацию - PullRequest
0 голосов
/ 10 января 2020

Я использую AEM Mocks для тестирования пользовательского сервлета, который использует конфигурацию, такую ​​как:

@Activate
void activate(final Config config) { ... }

Я следую описанному подходу здесь и здесь , чтобы зарегистрировать и внедрить службу вместе с HashMap, например:

private static Map<String, Object> myHashMap = new HashMap<>();

...

myHashMap.put("a", "b");
myHashMap.put("c", "d");

...

servlet = context.registerInjectActivateService(new MyServlet(), myHashMap);

Однако этот подход не работает. Переданный выше объект конфигурации внутри функции activate поврежден. Для каждой пары ключ-значение, приведенной выше, в качестве значения устанавливается null. Так что вместо:

a -> b
c -> d

Он устанавливает:

a -> null
c -> null

Внутри HashMap. Может кто-нибудь, пожалуйста, помогите? Спасибо!

PS Я должен добавить, что я использую AEM Mocks версии 2.3.0, поскольку последние версии вызывают проблему со старым артефактом. Подробнее об этом см. здесь .

1 Ответ

1 голос
/ 17 января 2020

Я протестировал его, и он работает с версией 2.3.0 тоже. Не могли бы вы проверить следующий пример? После этого это, вероятно, проблема maven. Тогда нам понадобится дополнительная информация.

Вот мой тестовый сервлет:

@Component(service = Servlet.class,
        property = {
                SLING_SERVLET_PATHS + "=/bin/servlet/test",
                SLING_SERVLET_METHODS + "=GET",
                SLING_SERVLET_EXTENSIONS + "=text"
        })
@Designate(ocd = TestServlet.Config.class)
public class TestServlet extends SlingSafeMethodsServlet {

    @ObjectClassDefinition
    public @interface Config {

        @AttributeDefinition(
                name = "Name",
                description = "Name used in the hello world text"
        )
        String name() default "Alex";

        @AttributeDefinition(
                name = "Greeting",
                description = "Greeting - Morning, to demonstrate the dot-replacement"
        )
        String greeting_morning() default "Good Morning";
    }

    private Config config;

    @Override
    protected void doGet(@Nonnull SlingHttpServletRequest request, @Nonnull SlingHttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/plain");
        response.setCharacterEncoding("utf-8");
        response.getWriter().println(this.getGreeting());
    }

    public String getGreeting() {
        return config.greeting_morning() + ", " + config.name();
    }

    @Activate
    void activate(final Config config) {
        this.config = config;
    }
}

Вот тест JUnit 4:

public class TestServletTest {

    @Rule
    public final AemContext context = new AemContext();

    @Test
    public void testWithoutConfig() {
        final TestServlet testServlet = context.registerInjectActivateService(new TestServlet());
        assertEquals("Good Morning, Alex", testServlet.getGreeting());
    }

    @Test
    public void testWithConfig() {
        final Map<String, Object> properties = new HashMap<>();
        properties.put("name", "Berndt");
        properties.put("greeting.morning", "Keep sleeping");
        final TestServlet testServlet = context.registerInjectActivateService(new TestServlet(), properties);

        assertEquals("Keep sleeping, Berndt", testServlet.getGreeting());
    }
}
...