Junit5 Mockito for Acitvate method | Community
Skip to main content
New Participant
March 23, 2021
Solved

Junit5 Mockito for Acitvate method

  • March 23, 2021
  • 2 replies
  • 2104 views

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.
Best answer by koenve

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()); }

 

 

2 replies

joerghoh
Employee
March 25, 2021

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/

koenve
New Participant
March 26, 2021
Nice, that's amazing. I'll check it out for myself too. Thanks!
koenve
koenveAccepted solution
New Participant
March 23, 2021

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()); }

 

 

gbawejaAuthor
New Participant
March 23, 2021
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?