diff --git a/web/gui/src/test/java/org/onosproject/ui/impl/topo/model/AbstractModelTest.java b/web/gui/src/test/java/org/onosproject/ui/impl/topo/model/AbstractModelTest.java
new file mode 100644
index 0000000..8cc047d
--- /dev/null
+++ b/web/gui/src/test/java/org/onosproject/ui/impl/topo/model/AbstractModelTest.java
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.ui.impl.topo.model;
+
+/**
+ * Base class for model test classes.
+ */
+public abstract class AbstractModelTest {
+
+    /**
+     * System agnostic end-of-line character.
+     */
+    protected static final String EOL = String.format("%n");
+
+    /**
+     * Prints the given string to stdout.
+     *
+     * @param s string to print
+     */
+    protected void print(String s) {
+        System.out.println(s);
+    }
+
+    /**
+     * Prints the toString() of the given object to stdout.
+     *
+     * @param o object to print
+     */
+    protected void print(Object o) {
+        print(o.toString());
+    }
+
+    /**
+     * Prints the formatted string to stdout.
+     *
+     * @param fmt    format string
+     * @param params parameters
+     * @see String#format(String, Object...)
+     */
+    protected void print(String fmt, Object... params) {
+        print(String.format(fmt, params));
+    }
+
+}
