I am embedding blue box on my image with some custom text on it , I have used below piece of code -
try (BufferedInputStream bis = new BufferedInputStream(new FileInputStream(new File(inputFilePath)))) {
image = ImageIO.read(bis);
image = checkOrientation(image, inputFilePath);
EImageGeoTagBannerSettings eImageGeoTagBannerSettings = getEImageGeoTagBannerSettings(image.getWidth());
int rectangleSubValueY = image.getHeight() - eImageGeoTagBannerSettings.getRectSubValueY();
int textPositionY = image.getHeight() - eImageGeoTagBannerSettings.getTextPositionSubValueY();
int fontSize = eImageGeoTagBannerSettings.getFontSize();
int rectangleHeight = image.getHeight() - eImageGeoTagBannerSettings.getRectHeight();
Font font = new Font("ROBOTO", Font.PLAIN, fontSize);
String text = createBannerText(documentVO);
AttributedString attributedText = new AttributedString(text);
attributedText.addAttribute(TextAttribute.FONT, font);
attributedText.addAttribute(TextAttribute.FOREGROUND, Color.WHITE);
Graphics graphics = image.getGraphics();
FontMetrics metrics = graphics.getFontMetrics(font);
graphics.setColor(new Color(42, 103, 173));
graphics.fill3DRect(RECTANGLE_X_AXIS_COORDINATE, rectangleSubValueY, image.getWidth(), rectangleHeight, false);
graphics.drawString(attributedText.getIterator(), RECTANGLE_X_AXIS_COORDINATE, textPositionY);
graphics.dispose();
boolean isImageCreated ;
try (BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(String.valueOf(geoTagEmbeddedImageInputFilePath))))) {
isImageCreated = ImageIO.write(image, extension, bos);
image.flush();
}
}
}
Now I am writing UT for above method,I have created Mockups for this. Since I am using @RunWith(JMockit.class)
new MockUp<ImageIO>(){
@Mock
public BufferedImage read(InputStream input) throws IOException {
return image;
}
@Mock
public boolean write(RenderedImage im,
String formatName,
OutputStream output){
return true;
}
};
new MockUp<FileInputStream>() {
@Mock
void $init(File arg0) {
}
};
How can I create a mockup for Font & Graphics which are basically from java.awt package? I tried looking for it online but couldn't find any test cases for these.
FYI: I have also given Font.class for prepare for test annotation
@PrepareForTest({ ImageMetadataReader.class, ImageIO.class, Font.class })
I tried creating mockup like this
new MockUp<Font>() {
@Mock
void $init(String name, int style, int size) {
}
};
But I am getting below error for this
java.lang.NullPointerException
at java.net.URLClassLoader.defineClass(URLClassLoader.java:463)
at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)