Ich habe einen Test, der einige Entitäten instanziiert, sie in MongoDB speichert und sie erneut lädt, um sicherzustellen, dass das Mapping korrekt funktioniert. Ich möchte die Annotation @DataMongoTest
für die Testklasse verwenden, um sicherzustellen, dass eine eingebettete MongoDB-Instanz dynamisch erstellt wird.Wie benutze ich benutzerdefinierte Konverter mit @DataMongoTest?
Dies funktionierte gut, bis ich benutzerdefinierte Konverter (org.springframework.core.convert.converter.Converter
) für einige Klassen einführen musste. Diese sind wie folgt aufgebaut:
@ReadingConverter
public class MyClassReadConverter implements Converter<Document, MyClass> {
...
@WritingConverter
public class MyClassWriteConverter implements Converter<MyClass, Document> {
...
@Configuration
public class SpringMongoSetup extends AbstractMongoConfiguration {
@Override
public Mongo mongo() throws Exception {
//I don't want that in the test..
return new MongoClient("localhost");
}
@Override
public CustomConversions customConversions() {
// ..but I need this
List<Converter<?,?>> converters = new ArrayList<>();
converters.add(new MyClassWriteConverter());
converters.add(new MyClassReadConverter());
return new CustomConversions(converters);
}
...
Für normale (nicht test) Ausführung funktioniert das gut. Der Test funktioniert auch, wenn ich die Annotation @SpringBootTest
verwende, die den Test meine Konfiguration verwendet. Leider definiert diese Konfiguration auch den Host/Port für MongoDB, aber ich möchte den Host/Port der eingebetteten MongoDB verwenden, die von @DataMongoTest
gestartet wurde.
Kann ich es irgendwie so konfigurieren, dass entweder @DataMongoTest
die benutzerdefinierten Konverter mit der eingebetteten MongoDB verwendet, oder dass ich den eingebetteten Host/Port beim Instantiieren meiner Konfigurationsklasse bekommen kann?
Das verwendet auch den Host/ip konfiguriert in 'SpringMongSetup'. (Ich habe den '@Override öffentlichen Mongo mongo() {..}' Teil in der Frage weggelassen, weil er für 'AbstractMongoConfiguration' zwingend erforderlich ist - ich habe ihn jetzt bearbeitet) Wie kann ich das überschreiben, um die eingebettete MongoDB von zu starten '@ DataMongoTest'? –