Having Method like
public boolean getConfirmation(int timeout) { Selection Selection; try { Selection = XYZ.getHelperCommands().getDisplayConfirmation(timeout); } catch (Exception e) { return false; } boolean result=false; if(Selection!=null) { result= (Selection.compareTo(Selection.YES) == 0); } logger.info("getConfirmation() completed with result : " + result); return result ; }
in above method helperCommands is a interface in my Jar file that contains getDisplayConfirmation() method my question is how can i mock this method i check below link but no help
Unit testing of Jar methods in java i’m using below dependency
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> <version>${junit.vintage.version}</version> <scope>test</scope> </dependency> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-params</artifactId> <version>5.0.0</version> </dependency>
is it mendatory to use powerMockRunner ? or above code is enough to write junit?
Advertisement
Answer
I am asuming that XYZgetHelperCommands() is some static call. In this case, I would suggest not using static mocking, but instead using a wrapper plus dependency injection. In other words, first you create a simple class…
public class HelperCommandWrapper { public Selection getDisplayConfirmation() { return XYZ.getHelperCommands().getDisplayConfirmation(timeout); } }
So, now you have a class that you can mock (ideally, use an interface). And now you simply give an instrance of that class into the constructor of your class…
public WhateverYourClassNameIs(HelperCommandWrapper helperCommandWrapper) { this.helperCommandWrapper = helperCommandWrapper; }
…and now you can use that in your code and also easily mock it…
public boolean getConfirmation(int timeout) { Selection Selection; try { Selection = this.helperCommandWrapper.getDisplayConfirmation(timeout); } catch (Exception e) { return false; }
And voila, now you can easily mock your specific usecase without having to care that the original implementation will call a static method.