{"id":"8c113c56f31781a3","repo":"junit-team/junit5","slug":"cannot-convert-null-to-targetclass-getname-c","errorCode":null,"errorMessage":"Cannot convert null to ${targetClass.getName()}; consider setting 'nullable = true'","messagePattern":"Cannot convert null to (.+?); consider setting 'nullable = true'","errorType":"exception","errorClass":"ArgumentConversionException","httpStatus":null,"severity":"error","filePath":"junit-jupiter-params/src/main/java/org/junit/jupiter/params/converter/JavaTimeArgumentConverter.java","lineNumber":62,"sourceCode":"\t\tqueries.put(LocalDateTime.class, LocalDateTime::from);\n\t\tqueries.put(LocalTime.class, LocalTime::from);\n\t\tqueries.put(OffsetDateTime.class, OffsetDateTime::from);\n\t\tqueries.put(OffsetTime.class, OffsetTime::from);\n\t\tqueries.put(Year.class, Year::from);\n\t\tqueries.put(YearMonth.class, YearMonth::from);\n\t\tqueries.put(ZonedDateTime.class, ZonedDateTime::from);\n\t\tTEMPORAL_QUERIES = Collections.unmodifiableMap(queries);\n\t}\n\n\t@Override\n\tprotected @Nullable Object convert(@Nullable Object input, Class<?> targetClass,\n\t\t\tJavaTimeConversionPattern annotation) {\n\n\t\tif (input == null) {\n\t\t\tif (annotation.nullable()) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tthrow new ArgumentConversionException(\n\t\t\t\t\"Cannot convert null to \" + targetClass.getName() + \"; consider setting 'nullable = true'\");\n\t\t}\n\t\tTemporalQuery<?> temporalQuery = TEMPORAL_QUERIES.get(targetClass);\n\t\tif (temporalQuery == null) {\n\t\t\tthrow new ArgumentConversionException(\"Cannot convert to \" + targetClass.getName() + \": \" + input);\n\t\t}\n\t\tString pattern = annotation.value();\n\t\tDateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);\n\t\treturn formatter.parse(input.toString(), temporalQuery);\n\t}\n\n}\n","sourceCodeStart":44,"sourceCodeEnd":75,"githubUrl":"https://github.com/junit-team/junit5/blob/956246301e03d757539f7b76dd5a91f298637563/junit-jupiter-params/src/main/java/org/junit/jupiter/params/converter/JavaTimeArgumentConverter.java#L44-L75","documentation":"Thrown by JavaTimeArgumentConverter.convert() when the input is null and the @JavaTimeConversionPattern annotation does not have nullable = true set. This converter is used when a parameter is annotated with @JavaTimeConversionPattern to parse date/time values. Unlike the default converter, null is rejected unless explicitly opted in.","triggerScenarios":"A @ParameterizedTest parameter annotated with @JavaTimeConversionPattern(\"yyyy-MM-dd\") receiving a null argument from @NullSource, @NullAndEmptySource, or an empty CSV field, without setting nullable = true on the annotation.","commonSituations":"Adding @NullSource to a parameterized test that uses @JavaTimeConversionPattern for date parsing, without enabling nullable. CSV sources with empty date columns where the converter receives null. Combining null-testing sources with temporal type parameters.","solutions":["Add nullable = true to the @JavaTimeConversionPattern annotation","Remove @NullSource / @NullAndEmptySource if null values are not expected for this parameter","Ensure CSV columns for date parameters are never empty"],"exampleFix":"// before\n@ParameterizedTest\n@NullSource\nvoid test(@JavaTimeConversionPattern(\"yyyy-MM-dd\") LocalDate date) { }\n\n// after\n@ParameterizedTest\n@NullSource\nvoid test(@JavaTimeConversionPattern(value = \"yyyy-MM-dd\", nullable = true) LocalDate date) { }","handlingStrategy":"validation","validationCode":"// Check the annotation before using null-providing sources:\nJavaTimeConversionPattern ann = parameter.getAnnotation(JavaTimeConversionPattern.class);\nif (ann != null && !ann.nullable() && usesNullSource) {\n    throw new IllegalStateException(\n        \"Set nullable = true on @JavaTimeConversionPattern or remove @NullSource\");\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Set nullable = true on @JavaTimeConversionPattern when the source may provide null","Remove @NullSource / @NullAndEmptySource from tests with @JavaTimeConversionPattern parameters if null is not expected","Ensure CSV date columns are never empty when nullable is false"],"tags":["argument-converter","java-time","null-value","parameterized-test","junit-jupiter-params"],"analyzedSha":"956246301e03d757539f7b76dd5a91f298637563","analyzedAt":"2026-08-04T19:25:17.049Z","schemaVersion":2}