Index: /applications/editors/josm/plugins/opendata/.classpath
===================================================================
--- /applications/editors/josm/plugins/opendata/.classpath	(revision 35277)
+++ /applications/editors/josm/plugins/opendata/.classpath	(revision 35278)
@@ -12,4 +12,9 @@
 	<classpathentry kind="src" path="util"/>
 	<classpathentry kind="src" output="bintest" path="test/unit">
+		<attributes>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="bintest" path="modules/fr.toulouse/test/unit">
 		<attributes>
 			<attribute name="test" value="true"/>
Index: /applications/editors/josm/plugins/opendata/modules/build.xml
===================================================================
--- /applications/editors/josm/plugins/opendata/modules/build.xml	(revision 35277)
+++ /applications/editors/josm/plugins/opendata/modules/build.xml	(revision 35278)
@@ -17,4 +17,7 @@
         <run_target target="clean"/>
     </target>
+    <target name="test">
+        <run_target target="test"/>
+    </target>
     <target name="install" depends="dist">
         <run_target target="install"/>
Index: /applications/editors/josm/plugins/opendata/modules/fr.toulouse/test/unit/org/openstreetmap/josm/plugins/opendata/modules/fr/toulouse/ToulouseModuleTest.java
===================================================================
--- /applications/editors/josm/plugins/opendata/modules/fr.toulouse/test/unit/org/openstreetmap/josm/plugins/opendata/modules/fr/toulouse/ToulouseModuleTest.java	(revision 35278)
+++ /applications/editors/josm/plugins/opendata/modules/fr.toulouse/test/unit/org/openstreetmap/josm/plugins/opendata/modules/fr/toulouse/ToulouseModuleTest.java	(revision 35278)
@@ -0,0 +1,28 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.plugins.opendata.modules.fr.toulouse;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
+
+/**
+ * Unit tests of {@link ToulouseModule} class.
+ */
+public class ToulouseModuleTest {
+
+    /**
+     * Setup test.
+     */
+    @Rule
+    public JOSMTestRules rules = new JOSMTestRules().preferences();
+
+    @Test
+    public void testHandlersConstruction() {
+        ToulouseModule module = new ToulouseModule(null);
+        assertFalse(module.getHandlers().isEmpty());
+        assertEquals(module.getHandlers().size(), module.getNewlyInstanciatedHandlers().size());
+    }
+}
Index: /applications/editors/josm/plugins/opendata/modules/fr.toulouse/test/unit/org/openstreetmap/josm/plugins/opendata/modules/fr/toulouse/ToulouseModuleTestIT.java
===================================================================
--- /applications/editors/josm/plugins/opendata/modules/fr.toulouse/test/unit/org/openstreetmap/josm/plugins/opendata/modules/fr/toulouse/ToulouseModuleTestIT.java	(revision 35278)
+++ /applications/editors/josm/plugins/opendata/modules/fr.toulouse/test/unit/org/openstreetmap/josm/plugins/opendata/modules/fr/toulouse/ToulouseModuleTestIT.java	(revision 35278)
@@ -0,0 +1,38 @@
+// License: GPL. For details, see LICENSE file.
+package org.openstreetmap.josm.plugins.opendata.modules.fr.toulouse;
+
+import static org.junit.Assert.assertTrue;
+
+import java.io.IOException;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.openstreetmap.josm.plugins.opendata.core.datasets.AbstractDataSetHandler;
+import org.openstreetmap.josm.testutils.JOSMTestRules;
+import org.openstreetmap.josm.tools.HttpClient;
+
+/**
+ * Integration tests of {@link ToulouseModule} class.
+ */
+public class ToulouseModuleTestIT {
+
+    /**
+     * Setup test.
+     */
+    @Rule
+    public JOSMTestRules rules = new JOSMTestRules().preferences().timeout(30_000);
+
+    @Test
+    public void testUrlValidity() throws IOException {
+        Map<String, Integer> errors = new TreeMap<>();
+        for (AbstractDataSetHandler handler : new ToulouseModule(null).getNewlyInstanciatedHandlers()) {
+            int code = HttpClient.create(handler.getLocalPortalURL()).connect().getResponseCode();
+            if (code >= 400) {
+                errors.put(handler.getLocalPortalURL().toExternalForm(), code);
+            }
+        }
+        assertTrue(errors.toString(), errors.isEmpty());
+    }
+}
