Home > Back-end >  Mockito:: Unit test case for JsonProcessingException when passing object
Mockito:: Unit test case for JsonProcessingException when passing object

Time:01-11

I have a class as shown below:

@Getter
@Setter
public class User{

    @Autowired
    Logger log;

    private String name;
    private String age;

    public String toJson(){
        ObjectMapper objectMapper = new ObjectMapper();
        String jsonString = null;
        try{
            jsonString = objectMapper.writeValueAsString(this);
        }catch(JsonProcessingException jsnEx){
            log.writeErr(" Error while parsing the Json"   jsnEx.getMessage());
        }
        return jsonString;
    }
}

Now I am trying to write a unit test case for this where I can throw exception and unit test the catch clause using Mockito but I am not able to mock it. I have noticed that object mapper class internally converting everything to string even if I set name and age to null. Can anyone please help me with this?

CodePudding user response:

Use constructor injection with Spring. This will allow you to inject mocked ObjectMapper in the class, which then you can set behavior in the test. See below.

@Getter
@Setter
public class User{

    private String name;
    private String age;
    
    private final Logger log;
    private final ObjectMapper objectMapper;
    
    public User(Logger log, ObjectMapper objectMapper){
        this.log = log;
        this.objectMapper = objectMapper;
    }

    public String toJson(){
        String jsonString = null;
        try{
            jsonString = objectMapper.writeValueAsString(this);
        }catch(JsonProcessingException jsnEx){
            log.writeErr(" Error while parsing the Json"   jsnEx.getMessage());
        }
        return jsonString;
    }
}


// Test

@Before
public setup(){
    @Mock
    Logger log;
    
    @Mock
    ObjectMapper objectMapper;        
    testObject = new User(log, objectMapper);
}

@Test
public test_toJson(){
    // given
    when(objectMapper.writeValueAsString(any())).thenThrow(new JsonProcessingException("Fake exception"))
    // when
    testObject.toJson()
}
  •  Tags:  
  • Related