{"id":"ddfcda46ebf69ae5","repo":"junit-team/junit5","slug":"cannot-convert-null-to-primitive-value-of-type-t","errorCode":null,"errorMessage":"Cannot convert null to primitive value of type ${targetType.getTypeName()}","messagePattern":"Cannot convert null to primitive value of type (.+?)","errorType":"exception","errorClass":"ArgumentConversionException","httpStatus":null,"severity":"error","filePath":"junit-jupiter-params/src/main/java/org/junit/jupiter/params/converter/DefaultArgumentConverter.java","lineNumber":78,"sourceCode":"\tpublic final @Nullable Object convert(@Nullable Object source, ParameterContext context) {\n\t\tClass<?> targetType = context.getParameter().getType();\n\t\tClassLoader classLoader = getClassLoader(context.getDeclaringExecutable().getDeclaringClass());\n\t\treturn convert(source, targetType, classLoader);\n\t}\n\n\t@Override\n\tpublic final @Nullable Object convert(@Nullable Object source, FieldContext context)\n\t\t\tthrows ArgumentConversionException {\n\n\t\tClass<?> targetType = context.getField().getType();\n\t\tClassLoader classLoader = getClassLoader(context.getField().getDeclaringClass());\n\t\treturn convert(source, targetType, classLoader);\n\t}\n\n\tpublic final @Nullable Object convert(@Nullable Object source, Class<?> targetType, ClassLoader classLoader) {\n\t\tif (source == null) {\n\t\t\tif (targetType.isPrimitive()) {\n\t\t\t\tthrow new ArgumentConversionException(\n\t\t\t\t\t\"Cannot convert null to primitive value of type \" + targetType.getTypeName());\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\tif (ReflectionUtils.isAssignableTo(source, targetType)) {\n\t\t\treturn source;\n\t\t}\n\n\t\tif (source instanceof String string) {\n\t\t\ttry {\n\t\t\t\treturn convert(string, targetType, classLoader);\n\t\t\t}\n\t\t\tcatch (ConversionException ex) {\n\t\t\t\tthrow new ArgumentConversionException(ex.getMessage(), ex);\n\t\t\t}\n\t\t}\n","sourceCodeStart":60,"sourceCodeEnd":96,"githubUrl":"https://github.com/junit-team/junit5/blob/956246301e03d757539f7b76dd5a91f298637563/junit-jupiter-params/src/main/java/org/junit/jupiter/params/converter/DefaultArgumentConverter.java#L60-L96","documentation":"Thrown by DefaultArgumentConverter.convert() when the source argument is null and the target parameter type is a primitive (int, long, boolean, etc.). Primitive types cannot hold null values, so the conversion fails. For reference types (Integer, Long, etc.), null is passed through without error.","triggerScenarios":"A @ParameterizedTest method declaring a primitive parameter (e.g., int, boolean) receiving a null argument from @NullSource, @NullAndEmptySource, @CsvSource with an empty field (when nullValues are configured), or a @MethodSource returning null. The DefaultArgumentConverter cannot assign null to a primitive.","commonSituations":"Using @NullSource or @NullAndEmptySource with a test that declares primitive parameters. CSV sources where a column is blank and configured to treat blanks as null. A @MethodSource that accidentally returns null in its stream. Parameter types that are primitives but the test data includes null sentinel values.","solutions":["Change the primitive parameter to its wrapper type (int -> Integer, boolean -> Boolean) so null is accepted","Remove @NullSource / @NullAndEmptySource if the parameter must be primitive","For CSV sources, ensure no column is empty for primitive parameters, or configure nullValues appropriately","Ensure @MethodSource methods never return null elements in the stream"],"exampleFix":"// before\n@ParameterizedTest\n@NullSource\nvoid test(int value) { } // int cannot be null\n\n// after\n@ParameterizedTest\n@NullSource\nvoid test(Integer value) { } // Integer accepts null","handlingStrategy":"validation","validationCode":"// Before using null-providing sources, check parameter types:\nfor (java.lang.reflect.Parameter p : method.getParameters()) {\n    if (p.getType().isPrimitive()) {\n        // Cannot use @NullSource / @NullAndEmptySource with this parameter\n        System.err.println(\"Primitive param \" + p + \" cannot receive null\");\n    }\n}","typeGuard":"// Ensure parameter is a wrapper type, not primitive:\n// int  -> Integer\n// long -> Long\n// boolean -> Boolean\n// etc.","tryCatchPattern":null,"preventionTips":["Use wrapper types (Integer, Long, Boolean) instead of primitives when testing with @NullSource","Remove @NullSource from tests with primitive parameters","For CSV sources, ensure no column is empty for primitive parameters","Ensure @MethodSource streams never contain null elements for primitive parameters"],"tags":["argument-converter","null-value","primitive-type","parameterized-test","junit-jupiter-params"],"analyzedSha":"956246301e03d757539f7b76dd5a91f298637563","analyzedAt":"2026-08-04T19:25:17.049Z","schemaVersion":2}