Ich habe ein springboot app (v1.3.5)Frühling Boot Override-Schnittstelle im Test
Meine Hauptanwendung geht:
@SpringBootApplication
@ComponentScan({"com.akrome"})
public class InboxCoreApplication {
public static void main(String[] args) {
SpringApplication.run(InboxCoreApplication.class, args);
}
}
Irgendwo in den Paketen habe ich ein Repo als Implementierung definiert:
@Repository
public class CouchbaseServiceImpl implements CouchbaseService {
Und woanders habe ich eine Klasse unter Verwendung dieser Schnittstelle:
Ich habe auch eine Testversion der Schnittstelle:
@Repository
public class CouchbaseServiceTestImpl implements CouchbaseService {
Jetzt. In meinem Test möchte ich einfach das Schnittstellen-Mapping auf die Test-Implementierung verweisen, während alles andere so bleibt, wie es beim Scannen der Haupt-Konfigurationskomponente definiert ist. Aber es geht weiter Bananen. Die nächstgelegene ich habe ist:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {InboxCoreApplication.class, TestConfig.class})
public class InboxServiceTest {
@Autowired
CouchbaseServiceTestImpl couchBaseServiceTestImpl;
Wo TestConfig ist:
@Configuration
public class TestConfig {
CouchbaseServiceTestImpl couchbaseServiceTestImpl = new CouchbaseServiceTestImpl();
public CouchbaseService couchbaseService() {
return couchbaseServiceTestImpl;
}
}
Aber jedes Mal, entweder es beschwert sich über dupliziert Bohne (bc es beide Implementierungen sieht), oder es spritzt 2 verschiedene Instanzen des Test Implementierung, eine in der Testklasse und eine im eigentlichen Programm (wat?).
Irgendwelche Vorschläge?
können Sie den Stack-Trace hier hinzufügen? –
Macht Sinn, Sie haben sowohl CouchbaseServiceTestImpl als auch CouchbaseServiceImpl, die beide vom Spring-Container für Ihren Test geladen werden. Einer wird aufgrund 'TestConfig' geladen, der andere aufgrund des Importierens der' InboxCoreApplication', die automatisch eine Komponentensuche für jedes Unterpaket durchführt. – g00glen00b