@Autowired арқылы көктем jdbctemplate шабуылын шығарады

Мен mockito-ны жасырын нысан кітапханасы ретінде қолданамын. Мен DAO тестілеуді біріктіремін.

DAOs JdbcTemplate бағдарламасын @Autowired арқылы енгізуді күтеді. Демек, DAO-ларда JDBC үлгісіне арналған бірліктерді тестілеу әдістері жоқ.

Менде келесі сериялы серіппелерді қолдануға арналған контент бар:



    

    
    
        
    

Мен сынақ өткізу уақытында көктем jdbctemplate данасын жасырып, оны DAO-ға автотірке келтіруді күтетінмін.

Бірақ бұл болмайды - орнына келесі ерекшелікті аламын:

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [org.springframework.jdbc.core.JdbcTemplate] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:920)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:789)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:703)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:474)
    ... 42 more

Осыған дейін кез-келген адам осы тәсілмен табысты болды ма?

Рахмет.

1
DAO қабаты үшін бөлек жоба бар және бұл кодты қамту коэффициенті 0% болатын жалғыз жоба, себебі біз DAO үшін жазбаша бірлікке арналған тесттерді өткізіп жібереміз, өйткені көптеген әдістердің біреуі бұл liners (бұл.jdbcTemplate.query немесе жаңарту) - бірақ сыртқы аудит, бұл (тестілік қамту жоқ), сондықтан мен құсбелгілерді белгілеу үшін бірлік сынақтарын жазып жатырмын ...
қосылды автор tapasvi, көзі
Ендірілген дерекқорды әртүрлі себептермен (Sybase ASE сұранысы синтаксисі жоқ) қолдана алмаймын .. және ендірілген дерекқормен тестілеу шынайы сынақ болмайды ... Жеке сынақ деректер базасын пайдалану тестілеуді жояды ... және бізде 7 әзірлеуші ​​бар және бір CI сервері ... сондықтан сынақтар оқшауланғанда орындалмайды ...
қосылды автор tapasvi, көзі
Бұл шын мәнінде DAO туралы емес ... оның көктемгі техникалық мәселе: сіз автокөлікті автотирлеуге және объектіні зауытпен қайтарылған нысанмен қалай құюға болады?
қосылды автор tapasvi, көзі
Мен JdbcTemplate-ды маскировкадағы нүктені көрмеймін. JDbcTemplate шабуылдау арқылы DAO тестілеудің мәні неде? Сіздің сынақ тестіңіз қандай болады?
қосылды автор JB Nizet, көзі
Яғни, шын мәнінде, тестілер ештеңе сынап көрмейді, бірақ жай ғана жасанды түрде қамтуды арттыру үшін қолданылады. Кешіріңіз, бірақ бұл шынымен ақымақ. Сіз сондай-ақ нақты JdbcTemplate-ді қолданып, тестіңізде кез келген ерекшелікті елемей-ақ елемеуіңіз мүмкін.
қосылды автор JB Nizet, көзі
Менің ойымша, бұл DAO жобасы бірлік сынақтарын емес, интеграциялық сынақтарды қолдануы керек деп ойлаймын. Осылайша, сіз тестілік деректер базасын жасауыңыз керек және DAO әдістерінің дұрыс нәтижелерін беретінін тексеріңіз. Сондай-ақ, DbUnit-ге қараңыз.
қосылды автор kan, көзі

2 жауаптар

Мәселе мынада, бұл жалпы әдісті қайтаратын mock зауыттық әдісі. Жоюдан кейін, серіппелеу объектінің түрін шығара алмайды, class төлсипатымен анық нысан түрін қамтамасыз етуге тырысыңыз.

public MockitoMockFactoryBean implements FactoryBean<?>
{
    private Class<?> objectType;

    @Override public Object getObject()
    {
        return Mockito.mock(objectType);
    }
    public void setObjectType(Class<?> objectType)
    {
        this.objectType=objectType;
    }
    @Override public Class<?> getObjectType()
    {
        return objectType;
    }
}
0
қосылды
Сәлеметсіздер ме ?: Мен сыныптық атрибутты көрсетуге тырыстым - жұмыс істемеді (бірақ қосымша қателер жоқ).
қосылды автор tapasvi, көзі
Мен осы FactoryBean-тің тәсілін растаймын.
қосылды автор tapasvi, көзі
О, оң Егер «зауыттық-бұршақ» атрибуты болса, «class» атрибуты пайдаланылмайды . Содан кейін FactoryBean іске қосудан басқа нұсқаны көрмеймін, ол дұрыс нысан түрін getObjectType әдісімен қайтарады.
қосылды автор kan, көзі

Тестілеу мәселелеріне көмектесетін бірнеше басқа әдістер бар:

Нақты дерекқорды пайдалану:

Spring Framework қолдау Тестілеу сізге мүмкіндік береді. орнату кезінде транзакцияларды бастауға және оларды кері соққымен кері орауға мүмкіндік береді, сондықтан деректер базасы сынақ деректерімен жарамайды. DBUnit -ті күрделі орнату үшін бұл көмектесуі мүмкін. Сіз көрсеткендей, бұл бірліктің сынақтарына қарағанда, ұзағырақ жұмыс істейді. Сол себепті әзірлеушілер көбінесе интеграциялық сынақтарды бөліктен құрастырушы бөлікке емес, әзірлеушінің құрылысына қарағанда бөлек бөлікке бөледі.

MockRunner пайдалану:

MockRunner - нәтиже жинағының деректерін толтыратын жалған JDBC құрамдастарын жасау үшін кітапхана және JdbcTemplate айырмашылықты білмейді. MockDataSource-ді тек кейбір көмекші сыныптар жазбастан жай ғана пайдалана отырып жасай алатыныңызға сенімдімін

Магнитоланы серіппелі сымдарсыз сынау барысында пайдалану:

Mockito үздік тестілеу үшін пайдаланылады. Сондықтан сіздің DAO тестілеріңіз көктемді пайдалана отырып сымды болмайды, сіз DAO-ге қолмен енгізген жасырын JdbcTemplate жасайтын жерде бірлік сынағын жасайсыз.

Егер сіз тек DAO-нен жеке-жеке тексеріп көрмесеңіз және бірнеше компоненттің нақты интеграциялық тестке қаншалықты сәйкес келетіндігін көргіңіз келсе, онда дерекқорды масалау нақты дерекқорыңызбен шығатын нақты мәселелерді жасырады. Егер сіздің жеке DAO-ң JdbcTemplates-тан шыққан шығындармен дұрыс әрекет етсеңіз, онда Mockito немесе MockRunner-ді қолдану сізге мұны жасауға мүмкіндік береді.

0
қосылды