Junit5 Mockito for Acitvate method | Community
Skip to main content
Level 2
Mar 23, 2021 8:51 PM UTC
Solved

Junit5 Mockito for Acitvate method

I have an activate method in service implementation class that is using OSGI configuration. I am looking for how to write Junit5 Test Cases for Activate method.

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
koenve
koenveAccepted solution
Level 2
Mar 23, 2021 10:04 PM UTC

As pointed out by @joerghoh , there's an even better way of doing it! 

 

Create a map with the properties you want to pass to your service

Map<String,Object> parameters = new HashMap<>(); parameters.put("my_property","my property");

You can then pass this to your context with the registerInjectActivateService method:

context.registerInjectActivateService(myService, parameters);

 

_____________________________________

Original answer:

What you can do is create a mock-implementation of your OSGI configuration interface.

 

private static class MockConfig implements MyService.Configuration { public String my_property() { return "my property"; } public Class<? extends Annotation> annotationType() { throw new NotImplementedException(); } }

 

You can then pass this to your unit test, so you can test that whatever needs to happen, happens:

 

void test_activate() throws Exception{ myService.activate(new MockConfig()); assertEquals("my property", myService.getMyProperty()); }

 

 

5 replies

joerghoh
Employee
Mar 25, 2021 8:58 PM UTC

You can get that done much easier if you are using SlingMocks. I have written a blog post about exactly the case you have: https://cqdump.joerghoh.de/2019/01/09/writing-unit-tests-for-aem-using-slingmocks/

Translate
koenve
Level 2
Mar 26, 2021 7:43 AM UTC
Nice, that's amazing. I'll check it out for myself too. Thanks!
Translate
koenve
koenveAccepted solution
Level 2
Mar 23, 2021 10:04 PM UTC

As pointed out by @joerghoh , there's an even better way of doing it! 

 

Create a map with the properties you want to pass to your service

Map<String,Object> parameters = new HashMap<>(); parameters.put("my_property","my property");

You can then pass this to your context with the registerInjectActivateService method:

context.registerInjectActivateService(myService, parameters);

 

_____________________________________

Original answer:

What you can do is create a mock-implementation of your OSGI configuration interface.

 

private static class MockConfig implements MyService.Configuration { public String my_property() { return "my property"; } public Class<? extends Annotation> annotationType() { throw new NotImplementedException(); } }

 

You can then pass this to your unit test, so you can test that whatever needs to happen, happens:

 

void test_activate() throws Exception{ myService.activate(new MockConfig()); assertEquals("my property", myService.getMyProperty()); }

 

 

Translate
gbawejaAuthor
Level 2
Mar 23, 2021 10:39 PM UTC
Thank you for your prompt reply @koenve..I will try this method. Can you please also suggest me how to write setup method with the example you gave above?
Translate