Junit5 Mockito for Acitvate method | Community
Skip to main content
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

koenve
koenveAccepted solution
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
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?
joerghoh
Adobe Employee
Adobe 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
March 26, 2021
Nice, that's amazing. I'll check it out for myself too. Thanks!