how to write JUNITs for constructor in AEM | Community
Skip to main content
Level 4
March 14, 2024
Solved

how to write JUNITs for constructor in AEM

  • March 14, 2024
  • 3 replies
  • 779 views

Hi All,

 

I have class like this which is using the constructor, can anyone please suggest me how to write a JUNIT for the constructor.

 

  

public class ABCModel extends XYZlManagerModel {
public ABCModel(String pagePath, Resource resource, LabelManagerFactoryConfig config) {
super(pagePath, resource, config);
}
protected XYZManagerModel(String pagePath, Resource resource, LabelManagerFactoryConfig config) {
this.resource = resource;
this.resolver = resource.getResourceResolver();
this.platformConfig = LabelManagerUtils.getCurrentConfig(pagePath, config);
this.dictionaryPath = buildDictionaryPath(pagePath);
}

public abstract String buildDictionaryPath(String pagePath);

Thanks in Advance.
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 Raja_Reddy

Hi @jagarlamudive 
To write a JUnit test for the constructor of the ABCModel class, you can use a testing framework like JUnit and create a test class that extends the TestCase class.

 

import junit.framework.TestCase; import org.apache.sling.api.resource.Resource; public class ABCModelTest extends TestCase { public void testConstructor() { // Create a mock Resource object Resource resource = createMockResource(); // Create a mock LabelManagerFactoryConfig object LabelManagerFactoryConfig config = createMockConfig(); // Create an instance of the ABCModel class using the constructor ABCModel model = new ABCModel("/content/mypage", resource, config); // Assert that the object was created successfully assertNotNull(model); } private Resource createMockResource() { // Implement a mock Resource object for testing purposes // ... } private LabelManagerFactoryConfig createMockConfig() { // Implement a mock LabelManagerFactoryConfig object for testing purposes // ... } }

 

 

we create a test method called testConstructor()  that creates a mock Resource object and a mock LabelManagerFactoryConfig object. We then create an instance of the ABCModel class using the constructor and assert that the object was created successfully using the assertNotNull() method.

You can also add additional assertions to the test method to verify that the object was created with the correct values. For example, you can assert that the pagePath parameter was set correctly by adding the following assertion:
assertEquals("/content/mypage", model.getPagePath());

3 replies

anupampat
Community Advisor
Community Advisor
March 14, 2024

Hi @jagarlamudive ,

 

Check the below code and play around with it

 

 

@ExtendWith({ AemContextExtension.class, MockitoExtension.class }) class ABCModelTest { private ABCModel aBCModel; @Mock private LabelManagerFactoryConfig config; private final AemContext aemContext = new AemContext(); @BeforeEach public void setup() { aemContext.load().json("<path-where-you-store-json>", "<page-path>"); aemContext.currentResource("<page-path>"); Resource resource = aemContext.resourceResolver().getResource("<page-path>"); String pagePath = resource.getPath(); aemContext.registerService(LabelManagerFactoryConfig.class, config); // Mock the config & register it in aem context aBCModel = new ABCModel(pagePath, resource, config); // Initializing your class } @Test public void buildDictionaryPathTest() { /** Use assert staements **/ } }

 

Raja_Reddy
Community Advisor
Raja_ReddyCommunity AdvisorAccepted solution
Community Advisor
March 14, 2024

Hi @jagarlamudive 
To write a JUnit test for the constructor of the ABCModel class, you can use a testing framework like JUnit and create a test class that extends the TestCase class.

 

import junit.framework.TestCase; import org.apache.sling.api.resource.Resource; public class ABCModelTest extends TestCase { public void testConstructor() { // Create a mock Resource object Resource resource = createMockResource(); // Create a mock LabelManagerFactoryConfig object LabelManagerFactoryConfig config = createMockConfig(); // Create an instance of the ABCModel class using the constructor ABCModel model = new ABCModel("/content/mypage", resource, config); // Assert that the object was created successfully assertNotNull(model); } private Resource createMockResource() { // Implement a mock Resource object for testing purposes // ... } private LabelManagerFactoryConfig createMockConfig() { // Implement a mock LabelManagerFactoryConfig object for testing purposes // ... } }

 

 

we create a test method called testConstructor()  that creates a mock Resource object and a mock LabelManagerFactoryConfig object. We then create an instance of the ABCModel class using the constructor and assert that the object was created successfully using the assertNotNull() method.

You can also add additional assertions to the test method to verify that the object was created with the correct values. For example, you can assert that the pagePath parameter was set correctly by adding the following assertion:
assertEquals("/content/mypage", model.getPagePath());

Madhur-Madan
Community Advisor
Community Advisor
March 15, 2024

Hi @jagarlamudive ,

To write a JUnit test for the constructor of the ABCModel class, you can use a testing framework like JUnit along with mocking frameworks like Mockito to mock the dependencies such as Resource and LabelManagerFactoryConfig. Here's an example of how you can write a JUnit test for the constructor:

import org.apache.sling.api.resource.Resource; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import static org.junit.Assert.assertEquals; import static org.mockito.Mockito.when; public class ABCModelTest { @Mock private Resource mockResource; @Mock private LabelManagerFactoryConfig mockConfig; @Before public void setUp() { MockitoAnnotations.initMocks(this); } @Test public void testConstructor() { // Mock necessary behavior for Resource and LabelManagerFactoryConfig when(mockResource.getResourceResolver()).thenReturn(null); // You can provide a resolver mock if needed // Add more behavior mocks for LabelManagerFactoryConfig if needed // Create an instance of ABCModel ABCModel abcModel = new ABCModel("/some/page/path", mockResource, mockConfig); // Verify that the constructor initializes the necessary fields correctly assertEquals("/some/page/path", abcModel.getPagePath()); // Add more assertions for other fields if needed } }

 


In this particular case, since you are testing the constructor of the ABCModel class, which doesn't seem to directly depend on any OSGi services or require service injection, you don't need to register any services for your JUnit test.
In this case, you don't need to explicitly register the LabelManagerFactoryConfig service, as it's being mocked and provided directly to the constructor during the test setup.

Thanks,
Madhur