diff --git a/src/test/java/de/tudresden/inf/mci/brailleplot/rendering/AbstractRasterCanvasTest.java b/src/test/java/de/tudresden/inf/mci/brailleplot/rendering/AbstractRasterCanvasTest.java
index 3a96b9e7ff4b98facee4b3fb4294b292f88fa5d5..0c48c258c62068612d08eacc974acb3e2007dc9b 100644
--- a/src/test/java/de/tudresden/inf/mci/brailleplot/rendering/AbstractRasterCanvasTest.java
+++ b/src/test/java/de/tudresden/inf/mci/brailleplot/rendering/AbstractRasterCanvasTest.java
@@ -1,4 +1,173 @@
 package de.tudresden.inf.mci.brailleplot.rendering;
 
+import de.tudresden.inf.mci.brailleplot.configparser.ConfigurationParser;
+import de.tudresden.inf.mci.brailleplot.configparser.Format;
+import de.tudresden.inf.mci.brailleplot.configparser.JavaPropertiesConfigurationParser;
+import de.tudresden.inf.mci.brailleplot.configparser.Printer;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+import java.io.File;
+
+
 public class AbstractRasterCanvasTest {
+
+    public static final String mDefaultConfig = getResource("default.properties").getAbsolutePath();
+    public static final String mBaseConfig = getResource("base_format.properties").getAbsolutePath();
+    public static final String mMarginsOnlyConfig = getResource("margins_only.properties").getAbsolutePath();
+    public static final String mConstraintOnlyConfig = getResource("constraint_only.properties").getAbsolutePath();
+    public static final String mBothConfig = getResource("margins_and_constraint.properties").getAbsolutePath();
+
+    public static File getResource(String fileName) {
+        ClassLoader classLoader = ClassLoader.getSystemClassLoader();
+        File resourceFile = new File(classLoader.getResource(fileName).getFile());
+        return resourceFile;
+    }
+
+    @Test
+    public void testBaseFormat() {
+        Assertions.assertDoesNotThrow(
+                () -> {
+                    ConfigurationParser parser = new JavaPropertiesConfigurationParser(mBaseConfig, mDefaultConfig);
+                    AbstractRasterCanvas canvas = new SixDotBrailleRasterCanvas(parser.getPrinter(), parser.getFormat("test"));
+
+                    // pre-calculated and measured correct values:
+                    int x = 0;
+                    int y = 0;
+                    int w = 35;
+                    int h = 30;
+                    double printW = (w * (2.5 + 3.5)) - 3.5; // 206.5 mm
+                    double printH = (h * (2 * 2.5 + 5.0)) - 5.0; // 295.0 mm
+
+                    // Test the calculated raster against the pre-calculated values
+                    Rectangle raster = canvas.getCellRectangle();
+                    Assertions.assertEquals(x, raster.getX());
+                    Assertions.assertEquals(y, raster.getY());
+                    Assertions.assertEquals(w, raster.getWidth());
+                    Assertions.assertEquals(h, raster.getHeight());
+                    Assertions.assertEquals(x, raster.intWrapper().getX());
+                    Assertions.assertEquals(y, raster.intWrapper().getY());
+                    Assertions.assertEquals(w, raster.intWrapper().getWidth());
+                    Assertions.assertEquals(h, raster.intWrapper().getHeight());
+                    Assertions.assertEquals(printW, canvas.getPrintableWidth());
+                    Assertions.assertEquals(printH, canvas.getPrintableHeight());
+
+                    // Test quantification (by equivalence class partitioning testing)
+                    Assertions.assertEquals(0, canvas.quantifyX(-5));
+                    Assertions.assertEquals(0, canvas.quantifyX(0));
+                    Assertions.assertEquals(9, canvas.quantifyX(28.25));
+                    Assertions.assertEquals(10, canvas.quantifyX(28.26));
+                    Assertions.assertEquals(69, canvas.quantifyX(206.5));
+                    Assertions.assertEquals(69, canvas.quantifyX(250));
+
+                    Assertions.assertEquals(0, canvas.quantifyY(-5));
+                    Assertions.assertEquals(0, canvas.quantifyY(0));
+                    Assertions.assertEquals(15, canvas.quantifyY(51.25));
+                    Assertions.assertEquals(16, canvas.quantifyY(51.26));
+                    Assertions.assertEquals(89, canvas.quantifyY(295.0));
+                    Assertions.assertEquals(89, canvas.quantifyY(350.0));
+                }
+        );
+    }
+
+    @Test
+    public void testMarginsOnly() {
+        Assertions.assertDoesNotThrow(
+                () -> {
+                    ConfigurationParser parser = new JavaPropertiesConfigurationParser(mMarginsOnlyConfig, mDefaultConfig);
+                    AbstractRasterCanvas canvas = new SixDotBrailleRasterCanvas(parser.getPrinter(), parser.getFormat("test"));
+
+                    // pre-calculated and measured correct values:
+                    // 6 mm left margin -> 1 cell border
+                    // 12 mm top margin -> ~ 1.2 cell sizes -> 2 cell border
+                    // 30 mm bottom margin -> 3 cell border
+                    int x = 1;
+                    int y = 2;
+                    int w = 34; // 35 - 1
+                    int h = 25; // 30 - 2 - 3
+                    double printW = (w * (2.5 + 3.5)) - 3.5; // 200.5 mm
+                    double printH = (h * (2 * 2.5 + 5.0)) - 5.0; // 245.0 mm
+
+                    // Test the calculated raster against the pre-calculated values
+                    Rectangle raster = canvas.getCellRectangle();
+                    Assertions.assertEquals(x, raster.getX());
+                    Assertions.assertEquals(y, raster.getY());
+                    Assertions.assertEquals(w, raster.getWidth());
+                    Assertions.assertEquals(h, raster.getHeight());
+                    Assertions.assertEquals(x, raster.intWrapper().getX());
+                    Assertions.assertEquals(y, raster.intWrapper().getY());
+                    Assertions.assertEquals(w, raster.intWrapper().getWidth());
+                    Assertions.assertEquals(h, raster.intWrapper().getHeight());
+                    Assertions.assertEquals(printW, canvas.getPrintableWidth());
+                    Assertions.assertEquals(printH, canvas.getPrintableHeight());
+                }
+        );
+    }
+
+    @Test
+    public void testConstraintOnly() {
+        Assertions.assertDoesNotThrow(
+                () -> {
+                    ConfigurationParser parser = new JavaPropertiesConfigurationParser(mConstraintOnlyConfig, mDefaultConfig);
+                    AbstractRasterCanvas canvas = new SixDotBrailleRasterCanvas(parser.getPrinter(), parser.getFormat("test"));
+
+                    // pre-calculated and measured correct values:
+                    // width-constraint: 190.0 mm -> fits 32 cells h.
+                    // height-constraint: 250.0 mm -> fits 25 cells v.
+                    int x = 0; // zero because constraint
+                    int y = 0; // moves reference point.
+                    int w = 30; // because raster.constraint.width = 30 < 32 (will pick minimum)
+                    int h = 25; // because 25 < raster.constraint.height = 28
+                    double printW = (w * (2.5 + 3.5)) - 3.5; // 176.5 mm
+                    double printH = (h * (2 * 2.5 + 5.0)) - 5.0; // 245.0 mm
+
+                    // Test the calculated raster against the pre-calculated values
+                    Rectangle raster = canvas.getCellRectangle();
+                    Assertions.assertEquals(x, raster.getX());
+                    Assertions.assertEquals(y, raster.getY());
+                    Assertions.assertEquals(w, raster.getWidth());
+                    Assertions.assertEquals(h, raster.getHeight());
+                    Assertions.assertEquals(x, raster.intWrapper().getX());
+                    Assertions.assertEquals(y, raster.intWrapper().getY());
+                    Assertions.assertEquals(w, raster.intWrapper().getWidth());
+                    Assertions.assertEquals(h, raster.intWrapper().getHeight());
+                    Assertions.assertEquals(printW, canvas.getPrintableWidth());
+                    Assertions.assertEquals(printH, canvas.getPrintableHeight());
+                }
+        );
+    }
+
+    @Test
+    public void testBoth() {
+        Assertions.assertDoesNotThrow(
+                () -> {
+                    ConfigurationParser parser = new JavaPropertiesConfigurationParser(mBothConfig, mDefaultConfig);
+                    AbstractRasterCanvas canvas = new SixDotBrailleRasterCanvas(parser.getPrinter(), parser.getFormat("test"));
+
+                    // pre-calculated and measured correct values:
+                    // width-constraint: 190.0 mm -> fits 32 cells h.
+                    // height-constraint: 250.0 mm -> fits 25 cells v.
+                    int x = 0;
+                    int y = 1;
+                    int w = 30;
+                    int h = 24;
+                    double printW = (w * (2.5 + 3.5)) - 3.5; // 176.5 mm
+                    double printH = (h * (2 * 2.5 + 5.0)) - 5.0; // 235.0 mm
+
+                    // Test the calculated raster against the pre-calculated values
+                    Rectangle raster = canvas.getCellRectangle();
+                    Assertions.assertEquals(x, raster.getX());
+                    Assertions.assertEquals(y, raster.getY());
+                    Assertions.assertEquals(w, raster.getWidth());
+                    Assertions.assertEquals(h, raster.getHeight());
+                    Assertions.assertEquals(x, raster.intWrapper().getX());
+                    Assertions.assertEquals(y, raster.intWrapper().getY());
+                    Assertions.assertEquals(w, raster.intWrapper().getWidth());
+                    Assertions.assertEquals(h, raster.intWrapper().getHeight());
+                    Assertions.assertEquals(printW, canvas.getPrintableWidth());
+                    Assertions.assertEquals(printH, canvas.getPrintableHeight());
+                }
+        );
+    }
 }
diff --git a/src/test/java/de/tudresden/inf/mci/brailleplot/rendering/MasterRendererTest.java b/src/test/java/de/tudresden/inf/mci/brailleplot/rendering/MasterRendererTest.java
index 4c687f157f1800203da7a158868abdf189530d01..33ddf6a07ecda590c85094c063d6fc8933c476b3 100644
--- a/src/test/java/de/tudresden/inf/mci/brailleplot/rendering/MasterRendererTest.java
+++ b/src/test/java/de/tudresden/inf/mci/brailleplot/rendering/MasterRendererTest.java
@@ -1,4 +1,99 @@
 package de.tudresden.inf.mci.brailleplot.rendering;
 
+import de.tudresden.inf.mci.brailleplot.configparser.ConfigurationParser;
+import de.tudresden.inf.mci.brailleplot.configparser.Format;
+import de.tudresden.inf.mci.brailleplot.configparser.JavaPropertiesConfigurationParser;
+import de.tudresden.inf.mci.brailleplot.configparser.Printer;
+import diagrams.BarChart;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeAll;
+import org.junit.jupiter.api.Test;
+
+import java.io.File;
+
+
 public class MasterRendererTest {
+
+    public static final String mDefaultConfig = getResource("default.properties").getAbsolutePath();
+    public static final String mBaseConfig = getResource("base_format.properties").getAbsolutePath();
+    public static Printer mPrinter;
+    public static Format mFormat;
+
+    public static File getResource(String fileName) {
+        ClassLoader classLoader = ClassLoader.getSystemClassLoader();
+        File resourceFile = new File(classLoader.getResource(fileName).getFile());
+        return resourceFile;
+    }
+
+    @BeforeAll
+    public static void initialize() {
+        Assertions.assertDoesNotThrow(
+                () -> {
+                    ConfigurationParser parser = new JavaPropertiesConfigurationParser(mBaseConfig, mDefaultConfig);
+                    mPrinter = parser.getPrinter();
+                    mFormat = parser.getFormat("test");
+                }
+        );
+    }
+
+    // Valid use test cases.
+
+    @Test
+    public void testRasterizerSelection() {
+        Assertions.assertDoesNotThrow(
+                () -> {
+                    // Create own rendering base
+                    FunctionalRenderingBase renderingBase = new FunctionalRenderingBase();
+
+                    // Register two different rasterizers for two different types.
+                    // The rasterizers are later distinguished by the number of pages they generate.
+                    FunctionalRasterizer<Text> rasterizerRef1 = new FunctionalRasterizer<>(Text.class, (data, canvas) -> {
+                        for (int i = 0; i < 1; i++) {
+                            canvas.getNewPage();
+                        }
+                    });
+                    FunctionalRasterizer<Image> rasterizerRef2 = new FunctionalRasterizer<>(Image.class, (data, canvas) -> {
+                        for (int i = 0; i < 2; i++) {
+                            canvas.getNewPage();
+                        }
+                    });
+                    renderingBase.registerRasterizer(rasterizerRef1);
+                    renderingBase.registerRasterizer(rasterizerRef2);
+
+                    // create renderer from rendering base
+                    MasterRenderer renderer = new MasterRenderer(mPrinter, mFormat, renderingBase);
+
+                    // Test rasterizer selection
+                    AbstractRasterCanvas result;
+
+                    result= renderer.rasterize(new Text("dummy text", new Rectangle(0,0,1,1)));
+                    Assertions.assertEquals(1, result.getPageCount());
+
+                    result = renderer.rasterize(new Image(getResource("dummy.bmp")));
+                    Assertions.assertEquals(2, result.getPageCount());
+
+                    // Test replacement of rasterizer
+                    FunctionalRasterizer<Image> rasterizerRef3 = new FunctionalRasterizer<>(Image.class, (data, canvas) -> {
+                        for (int i = 0; i < 3; i++) {
+                            canvas.getNewPage();
+                        }
+                    });
+                    renderingBase.registerRasterizer(rasterizerRef3);
+
+                    result = renderer.rasterize(new Image(getResource("dummy.bmp")));
+                    Assertions.assertEquals(3, result.getPageCount());
+
+                }
+        );
+    }
+
+    // Invalid use test cases.
+
+    @Test
+    public void testRasterizerNotAvailable() {
+        // Create MasterRenderer with empty rendering base.
+        MasterRenderer empty = new MasterRenderer(mPrinter, mFormat, new FunctionalRenderingBase());
+
+        Assertions.assertThrows(IllegalArgumentException.class, () -> empty.rasterize(new Image(getResource("dummy.bmp"))));
+    }
 }
diff --git a/src/test/resources/margins_and_constraint.properties b/src/test/resources/margins_and_constraint.properties
index 173ff55901ccb0915e9ac99b00023983afd3da1a..f20c53e4a0e79b1b8ae7380e7a0dfad6c86a0f8f 100644
--- a/src/test/resources/margins_and_constraint.properties
+++ b/src/test/resources/margins_and_constraint.properties
@@ -16,7 +16,7 @@ printer.constraint.top=5.0
 printer.constraint.left=7.5
 printer.constraint.width=190.0
 printer.constraint.height=250.0
-printer.raster.constraint.top=1
+printer.raster.constraint.top=0
 printer.raster.constraint.left=2
 printer.raster.constraint.width=30
 printer.raster.constraint.height=28
@@ -27,5 +27,5 @@ printer.raster.constraint.height=28
 # Test margins
 format.test.margin.top=12
 format.test.margin.left=6
-format.test.margin.bottom=30
+format.test.margin.bottom=42
 format.test.margin.right=0
\ No newline at end of file