Mam abstrakcyjną klasę:Wiosna Autowire Adnotacja na klasy abstrakcyjnej: No wyjątkowy fasola jest zdefiniowana
@Component
public abstract class BaseReport {
public void export() {
...
}
i kilka klas, które go rozszerzać i zastąpić metodę export() (lub nie) .
@Component
public final class Report1 extends BaseReport
@Component
public final class Report2 extends BaseReport
Większość moich testów autowire konkretnych klas, które rozszerzają BaseReport, bez żadnych problemów:
public class Report1Test extends BaseTest {
@Autowired
Report1 _report;
public class Report2Test extends BaseTest {
@Autowired
Report2 _report;
Działa to dobrze dla autowiring wszystkich klas, które rozciągają BaseReport. Ale muszę również wyposażyć samą klasę abstrakcyjną, BaseReport, w testowanie metody export().
public class BaseReportTest extends BaseTest {
@Autowired
BaseReport _report;
Gdy próbuję uruchomić go otrzymuję niesławny:
No wyjątkowy fasoli typu BaseReport jest zdefiniowana: oczekiwany jeden pasujący fasoli, ale okazało 2 [raportu1, sprawozdania2].
Próbowałem używać @Qualifier, ale problem z @Qualifier jest taki, że (jak rozumiem) używasz go, aby powiedzieć Spring, która klasa - która implementuje interfejs lub rozszerza klasę Abstract - chcesz użyć . Ale to nie jest moja sprawa. Chcę użyć samej klasy abstrakcyjnej.
Próbowałem też za pomocą @Resource, tak:
public class BaseReportTest extends BaseTest {
@Resource(name = "baseReport")
BaseReport _report;
Wiosna mówi mi, nie ma fasoli o tej nazwie. :(
Jak mogę to zrobić?
Cheers.
Masz całkowitą rację. Po przeczytaniu odpowiedzi, spojrzałem jeszcze raz i na pewno, trochę źle zrozumiałem problem. Wszystkie konkretne klasy rozszerzają BaseReport i implementują metodę export(), * ale * metoda export() nie pochodzi z BaseReport, ale raczej z interfejsu IReport, który implementuje BaseReport i wszystkie konkretne raporty. Nie ma potrzeby testowania metody export() BaseReport, ponieważ jej nie ma! Ponieważ testowałem już każdą metodę "export()" dla konkretnej klasy, moja praca została zakończona. Wielkie dzięki za pomoc. –