Skip to main content

Junit Expected Exception checking

I was writing a temporary REST api for folder search until the elasticsearch based api is live. The api has some validation code and I was trying to test it.

    public Response search(@Context User user, FolderSearchRequest folderSearchRequest) throws ApplicationException {
        if (StringUtils.length(folderSearchRequest.getQuery()) < 3) {
            throw new GenericRestServiceException(ErrorCode.FailedValidation, INVALID_QUERY_MSG);
        if (folderSearchRequest.getStart() < 0) {
            throw new GenericRestServiceException(ErrorCode.FailedValidation,
        if (folderSearchRequest.getLimit() <= 0) {
            throw new GenericRestServiceException(ErrorCode.FailedValidation,

At first I was writing code like

    public void testQueryMinimumChars() throws ApplicationException {, new FolderSearchRequest("te", 0, 20));
    public void testNegativeStart() throws ApplicationException {, new FolderSearchRequest("test", -1, 20));

Only issue with this was that I wont know what exception is thrown. It seems Junit has a concept of ExpectedExceptions and you can check much more about expected exceptions than the annotation way.

The same code can be written as

public class FolderSearchEndPointUnitTest {
    private FolderSearchEndPoint sut = new FolderSearchEndPoint();
    public ExpectedException expectedException = ExpectedException.none();

    public void testQueryMinimumChars() throws ApplicationException {
        expectedException.expectMessage(FolderSearchEndPoint.INVALID_QUERY_MSG);, new FolderSearchRequest("te", 0, 20));

    public void testNegativeStart() throws ApplicationException {
        expectedException.expectMessage(FolderSearchEndPoint.INVALID_START_MESSAGE);, new FolderSearchRequest("test", -1, 20));

Edit: I had to change this code to do more detail exception checking and that is mentioned at


Popular posts from this blog

Docker Aha moment

I had read many articles about docker before but today was the day when I realized the aha moment.  I had designed database structure of a new application where different micro-services uses their own schemas and each can be located on its own server depending on the scale requirement. Locally I had kept them on same mysql host but on production it will be used on different Google CloudSQL instances.  The aha moment for me was when I was able to fire up multiple mysql containers and map them to a different port and do end to end testing of my sharding code all on local box.

All I had to do was

docker run -p 3306:3306 -d
docker run -p 3307:3306 -d
docker run -p 3308:3306 -d
docker run -p 3309:3306 -d
docker run -p 3310:3306 -d

and I had many mysql servers ready to be tested.   In the VM world I would not even had dared to start 5 vm on my laptop.

IPhone will beat DSLR in long run

I started taking interest in photography recently and have accumulated a decent amount of gear but I am realizing that the ease of taking out your phone and clicking picture will beat the DSLR in long run. A friend recently visited me from NY and we wanted to take a family picture and I was setting up Tripod and Flash and doing settings changes and he was like leave all this, lets take a Selfie and that’s it, in 2 second the picture was done and he shared it on facebook in another 1 second.  Now one can argue that DSLR would have clicked a better picture but DSLR has many things going against it:-
Learning curve : I must have spent 200+hours on reading about photography but still cant take decent pictures as my bar is high. Not everyone is interested in spending this much time.Amount of gear to be carried : On hikes its a pain to carry your DSLR whereas your phone has to be anyway with you.Cognitive effort of tweaking the gear: You have to have a different lens/settings for different s…

Embracing "Deep Work" for productivity

Do you have that feeling where you worked all day but at the end it feels like you got nothing done?  In past 7 years at Egnyte to reduce burnout every 6 months to an year I have to fight this constant productivity battle. I have accumulated several habits in the process to increase productivity, some of them are:-
Give yourself scheduled time: Allocate 3 hours for creative work, I had my calendar open whole day and I would get interviews and meeting scheduled randomly all over the day. When you are on a maker's schedule this is disastrous. I recently allocated 3 hours of calendar time and I reject meeting invite unless its absolutely urgent and I am contributing to it.Walk in middle of the day: by the middle of the day brain feels tired and I cant code or focus so I started 30 min walk. I tried listening to podcast or listening music on the walk but that felt more work so I stopped doing it. I just walk and think on the current problem on hand.5 minute rule: If you can finish the …