diff --git a/CHANGELOG.md b/CHANGELOG.md
index 1e5b8c7b2eea9ca9c2e38714d5f27c0f28cd63fd..7bad2b405ee49661de3b268513b7bf6cf8c6f36c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -14,6 +14,7 @@ SPDX-License-Identifier: GPL-3.0-or-later
 ### Changed
 ### Removed
 ### Fixed
+- fail on duplicated arguments to test methods
 
 ## [2.3.0](https://git.ufz.de/rdm-software/saqc/-/tags/v2.3.0) - 2023-01-17
 [List of commits](https://git.ufz.de/rdm-software/saqc/-/compare/v2.2.1...v2.3.0)
diff --git a/saqc/core/register.py b/saqc/core/register.py
index dac71ea792496d8ca8a44d37a163863ed685dcc8..eec3dfbc5c7b058ad4cefa484de52aa54a72ad80 100644
--- a/saqc/core/register.py
+++ b/saqc/core/register.py
@@ -333,7 +333,15 @@ def register(
             paramnames = tuple(func_signature.parameters.keys())[
                 2:
             ]  # skip (self, field)
-            kwargs = {**dict(zip(paramnames, args)), **kwargs}
+
+            # check for duplicated arguments
+            args_map = dict(zip(paramnames, args))
+            intersection = set(args_map).intersection(set(kwargs))
+            if intersection:
+                raise TypeError(
+                    f"SaQC.{func.__name__}() got multiple values for argument '{intersection.pop()}'"
+                )
+            kwargs = {**args_map, **kwargs}
             kwargs["dfilter"] = _getDfilter(func_signature, saqc._scheme, kwargs)
 
             # translate flag