diff --git a/swh/loader/core/loader.py b/swh/loader/core/loader.py
--- a/swh/loader/core/loader.py
+++ b/swh/loader/core/loader.py
@@ -31,6 +31,7 @@
     "max_content_size": 100 * 1024 * 1024,
     "save_data": False,
     "save_data_path": "",
+    "storage": {"cls": "memory"},
 }
 
 
@@ -70,9 +71,14 @@
     """
 
     def __init__(
-        self, logging_class: Optional[str] = None,
+        self,
+        logging_class: Optional[str] = None,
+        config: Optional[Dict[str, Any]] = None,
     ):
-        self.config = load_from_envvar(DEFAULT_CONFIG)
+        if config:
+            self.config = config
+        else:
+            self.config = load_from_envvar(DEFAULT_CONFIG)
 
         self.storage = get_storage(**self.config["storage"])
 
diff --git a/swh/loader/core/tests/test_loader.py b/swh/loader/core/tests/test_loader.py
--- a/swh/loader/core/tests/test_loader.py
+++ b/swh/loader/core/tests/test_loader.py
@@ -7,7 +7,7 @@
 import hashlib
 import logging
 
-from swh.loader.core.loader import BaseLoader, DVCSLoader
+from swh.loader.core.loader import DEFAULT_CONFIG, BaseLoader, DVCSLoader
 from swh.loader.tests import assert_last_visit_matches
 from swh.model.model import Origin, OriginVisit, Snapshot
 
@@ -81,12 +81,24 @@
     assert result == {"status": "eventful"}
 
 
+def test_base_loader_with_config(swh_config):
+    loader = DummyBaseLoader("logger-name", DEFAULT_CONFIG)
+    result = loader.load()
+    assert result == {"status": "eventful"}
+
+
 def test_dvcs_loader(swh_config):
     loader = DummyDVCSLoader()
     result = loader.load()
     assert result == {"status": "eventful"}
 
 
+def test_dvcs_loader_with_config(swh_config):
+    loader = DummyDVCSLoader("another-logger", DEFAULT_CONFIG)
+    result = loader.load()
+    assert result == {"status": "eventful"}
+
+
 def test_loader_logger_default_name(swh_config):
     loader = DummyBaseLoader()
     assert isinstance(loader.log, logging.Logger)