Im `year`-Feld akzeptiert `biblatex` nicht ganzzahlige Wert wie `o.J.` noch relativ gut. Es gibt lediglich eine Warnung der Art
```
WARN - legacy year field 'o.J.' in entry 'Test.o.J.' is not an integer - this will probably not sort properly.
```
was nicht ganz unverständlich ist.
Bei `date` sähe das anders aus, dort muss das Feld im ISO8601-Format befüllt werden und `o.J.` ist dann ganz klar ein Fehler.
Im Allgemeinen ist es besser, einfach kein `year` oder `date` anzugeben, wenn man keins hat. Der Stil entscheidet dann, was passieren muss. Zumeist wird einfach kein Datum angezeigt, bei Name-Jahr-Zitierstilen wird eventuell ein "o.D." ausgegeben.
Allerdings ist es so, dass die Standard `authoryear`-Stile recht "verzweifelt" versuchen, dennoch ein Jahr anzuzeigen, wenn `date`/`year` nicht gegeben ist, und dann auf `urldate` zurückgreifen, was unter Umständen nicht gewünscht ist. Abstellen kann man das mit `\DeclareLabeldate`.
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage[autostyle]{csquotes}
\usepackage[backend=biber, style=authoryear]{biblatex}
\DeclareLabeldate{%
\field{date}
\field{year}
\field{eventdate}
\field{origdate}
\literal{nodate}
}
\begin{filecontents}{\jobname.bib}
@online{Test.o.J.,
editor = {Test},
title = {Test},
url = {https://example.com},
urldate = {2021-01-01},
file = {Test},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
Lorem~\autocite[2]{Test.o.J.}
\printbibliography
\end{document}
Man beachte auch die von Bartman in den Kommentaren angesprochenen Punkte
* Im Feld `url` sollte die nackte URL stehen. Das `\url{...}`-Makro ist unnötig und sogar der Sache abträglich.
* Im `postnote`-Argument braucht man bei einfachen Seitenzahlen, Seitenzahlen das `S.~` nicht anzugeben, das kann `biblatex` selbst.
selbst. (Das ist besonders für Dokumente auf Englisch interessant, da `biblatex` dort sogar automatisch zwischen "p." und "pp." wechselt.)
* Die Option `babel` von `csquotes` heißt seit mehr als 11 Jahren `autostyle`. `german=quotes` ist die Voreinstellung.