How to create Mockup for java.awt.Font?

24 views Asked by At

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)
0

There are 0 answers