Friday, December 9, 2016

How to Write Tests in AEM

Use Case: Writing tests for AEM application.

Current Issue: As your project and code base grows, it is really important to make sure that test coverage for code is there to maintain consistency and sanity of your code. Writing test cases for AEM is little bit different than writing conventional Java test cases, This makes it difficult for beginner to write test cases for AEM application.

Idea of this post to give different options available for writing unit test for AEM services.

Prerequisite:
Good to know:
I would explain how you can have better test coverage for your application by giving different use cases,

Dependencies: It is recommended to have following dependencies in to your pom before start writing for tests for your application
Case 1: Writing test cases for Generic Helper class.

This is simplest use case where your generic helper class (For example StringUtils, DateUtils) is not using any AEM libraries. For this you can simply use Junit to write your unit test. https://www.tutorialspoint.com/junit

Here is very simple example:


Case 2: Writing test cases for AEM Helper class

This is second use case where you want to test AEM helper methods. For this you can use combination of Junit and Mockito. Use Mockito to Mock AEM services and methods and Junit for assertion.

Here is simple example

Case 3: Writing test cases for AEM services

Now it gets little bit tricky where you need to mock certain behavior of bundle and implicit object. That's why Sling has created Mock version of sling objects and wcm.io has created mock version of AEM objects. You can just use aem mock http://wcm.io/testing/aem-mock/ to achieve most of your use cases. (AEM mock extend Sling mock).

here are some of the common use cases you will come across while testing your service.

1) How can I mock content my service is running against ?

For this it is recommended to use contentLoader API http://wcm.io/testing/aem-mock/usage.html to either load existing json based resource (You can simply get it by creating resource in CRXDE and then using something like RESOURCEPATH.infinity.json to get json for that resource) or just create mock resource using ContentBuilder context.create().resource() or ResourceBuilder context.build().resource() http://wcm.io/testing/aem-mock/apidocs/

Note that if you are mocking Page object then you have to use aem mock using aemcontext.pageManager().create()

2) How Can I initialize properties in the bundle ?

You can use register and activate OSGI service with properties http://wcm.io/testing/aem-mock/usage.html#Registering_OSGi_service for that. Here is some example


3) How Can I inject other service for my service ?

You can either Mock service or use register service API for that http://wcm.io/testing/aem-mock/usage.html#Registering_OSGi_service

Note that when you inject a service to your service using Reference then you have to register this your injected service, otherwise your test will fail.

4) How Can I test sling model ?

You can use aemContext for that. http://wcm.io/testing/aem-mock/usage.html#Sling_Models


Case 4: Writing test cases for AEM servlets and filters

This is very similar to how you would do test cases for Service. For request and response you either have to mock request / response object using Mockito or Use Spy  or use sling request and response mock. Since a lot of methods in filter and servlet do not return any result, Make Mockito verify your friend.  Here is one example using simple mockito to test servlet



 How can I measure my test coverage ?

 You can use jococo test coverage plugin along with your build system to measure this coverage. You can have following plugin in to your parent pom



How Can I write Integration test in AEM ?

Very good example here https://github.com/sneakybeaky/AEM-Integration-Test-Example

It is based of sling test base https://sling.apache.org/documentation/development/sling-testing-tools.html

I know this information is not enough to have you set up for writing tests in AEM. Feel free to let me know if you have more question and I will add more stuff here.

27 comments:

  1. Great Article… I love to read your articles because your writing style is too good, its is very very helpful. yoga teacher training in rishikesh

    ReplyDelete
  2. Hi DEAR..Thanks for sharing this post.I think it is a transcendent post. Such a wide number of an abundance of a dedication of appreciation is all together for this data. We Are Mobile Signal Booster
    get in touch with us for mobile network solution

    ReplyDelete
  3. Hi DEAR ...It was actually wonderful reading this info and I think you are absolutely right and I truly appreciate the article post thanks for sharing... WE are WYOXSPORTS
    weightlifting accessories contat us for all weightlifting accessories

    ReplyDelete
  4. Great Article… I love to read your articles because your writing style is too good, its is very very helpful for all of us and I never get bored while reading your article because, they are becomes a more and more interesting from the starting lines until the end. clark county detention center 24 hour bail bonds

    ReplyDelete
  5. This is a decent article here with some helpful hints for the individuals who are not used-to remark that much of the time. A debt of gratitude is in order for this accommodating data I concur with all focuses you have given to us. I will pursue every one of them.

    Astrologer In Jaipur
    Astrologer in Hyderabad
    black magic specialist in bangalore
    Vashikaran specialist in Mumbai
    Love marriage specialist in Delhi
    Vashikaran specialist in Delhi
    Best Astrologer in Delhi
    love marriage specialist
    Astrologer in Kolkata
    Love Marriage Specialist In Hyderabad

    ReplyDelete
  6. It has been essentially unfathomably liberal with you to give transparently what precisely numerous people would've promoted for an eBook to finish up making some money for their end, fundamentally given that you could have attempted it in the occasion you needed.
    Adopt Pets
    Adopt dogs near me
    Adopt cat near me

    ReplyDelete
  7. Great Article… I love to read your articles because your writing style is too good, its is very very helpful. yoga teacher training in rishikesh
    yoga ttc in rishikesh
    200 hours yoga teacher training in rishikesh

    ReplyDelete
  8. Hey Nice Blog!! Thanks For Sharing!!!Wonderful blog & good post.Its really helpful for me, waiting for a more new post. Keep Blogging!
    SEO company in coimbatore
    SEO company
    web design company in coimbatore

    ReplyDelete
  9. Great Article… I love to read your articles because your writing style is too good, its is very very helpful for all of us and I never get bored while reading your article because, they are becomes a more and more interesting from the starting lines until the end. if you are looking for satyanarayan puja please visit us.

    ReplyDelete
  10. Great Article… I love to read your articles because your writing style is too good, its is very very helpful. yoga teacher training in rishikesh

    ReplyDelete
  11. Hello DEAR ... I really value the article post a debt of gratitude is in order for sharing... WE are Free Jobs Notifications we are here to help candidates set up automatic monitoring for Bank of Baroda Recruitment

    ReplyDelete
  12. Zehra Global Services provides the best services Graphic Design, Software Development, Digital marketing and Mobile app development. It provides the best services to our customer.
    Mobile App Development
    Graphic Design
    Digital marketing

    ReplyDelete
  13. This comment has been removed by the author.

    ReplyDelete
  14. I found this article useful and looking forword for similar kind of blogs and if you want to know about TOP WEDDING PLANNERS CALGARY then u r at right place.

    ReplyDelete
  15. Nice blogs and eagerly waiting for such blogs and if you looking forword for Affordable Web Development Services then you are right place.

    ReplyDelete
  16. Nice blogs and eagerly waiting for such blogs and if you looking forword forTOP WEDDING PLANNERS CALGARY then u r at right place

    ReplyDelete
  17. "Extraordinary Article… I want to peruse your articles on the grounds that your composition style is excessively great, its is extremely useful. I really value the article post a debt of gratitude is in order for sharing... WE are Ayurvedic Herbs Products get in touch with us for all Buy Wellness Products Online , Buy Ayurvedic Herbs Online
    Buy Wellness Products"

    ReplyDelete
  18. Great post. I was once checking constantly this weblog and I'm impressed! Extremely useful information specially the closing part. I maintain such information much. I was once seeking this specific information for a very long time. Many thanks and best of luck you are looking for BEST NEWSMAGAZINE please visit us.

    ReplyDelete
  19. Greetings DEAR ...It was really magnificent perusing this information and I think you are totally right and I genuinely welcome the article post a debt of gratitude is in order for sharing... WE are Hazard Communication Training get in touch with us for Confined Space Entry Training , Heavy Equipment Training Program

    ReplyDelete
  20. Great post. I was once checking constantly this weblog and I'm impressed! Extremely useful information specially the closing part. I maintain such information much. I was once seeking this specific information for a very long time. Many thanks and best of luck you are looking for BEST NEWSMAGAZINE please visit us. BEST NEWSFEED SITE

    ReplyDelete