Ein Singleton ist ja erstmal nur eine zentrale Instanz, die nur einmal im Programm existiert. Das bedeutet aber nicht, dass diese Instanz immer die gleiche Implementierung haben muss.

Zitat von
https://de.wikipedia.org/wiki/Singleton_(Entwurfsmuster):
Das Singleton findet Verwendung, wenn
- nur ein Objekt zu einer Klasse existieren darf und ein einfacher Zugriff auf dieses Objekt benötigt wird oder
- das einzige Objekt durch Unterklassenbildung spezialisiert werden soll.
Für Unittests kann man ja auch einen Mock als Singleton verwenden. Auch ein
Null-Object als Default-Implementation ist zulässig, wenn keine andere Implementierung benötigt wird.
Wenn das nicht ginge, könnte man die Singleton-Klassen ja gleich als
sealed
deklarieren.