Ich habe ein Spring-Boot-Projekt, das eine Reihe von Komponententests hat, die die @InjectMocks von Mockito verwenden, um sowohl die zu testende Klasse zu instanziieren als auch etwaige Mocks einzufügen.@Autowire kombiniert mit @InjectMocks
Mit anderen Worten, wenn ich dieses
@InjectMocks MyClass myClass;
Dann brauche ich nicht
MyClass myClass = New MyClass();
oder @Autowired MyClass myClass;
Bis jetzt funktionierte dieses Setup gut.
In jüngerer Zeit ist es jedoch notwendig geworden, beim Ausführen von Tests auf die Spring-Boot-Eigenschaften des Projekts zuzugreifen. Dies bedeutet, dass der SpringBoot-Task-Runner in Tests verwendet werden musste, damit alle Instanzen von @Autowire (einschließlich derjenigen, die die Environment-Klasse instanziieren) funktionieren.
Ich entdeckte, dass wenn @InjectMocks verwendet wird, um eine Klasse zu instanziieren, alle Instanzen von @Autowired innerhalb der Klasse nicht funktionieren (das Objekt, das sie erstellen sollten, ist null). Dies bedeutet keine Environment-Klasse und keinen Zugriff auf Spring-Eigenschaften.
Stattdessen habe ich @Autowired auf die @InjectMocks Anmerkung
so dass diese
@InjectMocks MyClass myClass hinzuzufügen;
wird diese
@Autowired
@InjectMocks MyClass myClass;
Meine Frage ist einfach. Ist etwas falsch daran, dies zu tun? Doubles instantiate myClass oder alles, was Störungen verursachen kann