t.me/atinfo_chat Telegram группа по автоматизации тестирования

Не работает аннотация @Autowired в тесте

design-patterns
spring
data
java
Теги: #<Tag:0x00007f9c4e6944d8> #<Tag:0x00007f9c4e694398> #<Tag:0x00007f9c4e6940c8> #<Tag:0x00007f9c4e695c48>

(Яна Телегина) #1

есть интерфейс

public interface  Authorization {
    UserDto authorization(UserDto userDto) throws IOException,NullPointerException;
}

его реализация

@Component 
public class AuthorizationImpl extends  RestClient implements Authorization {
    private final String url = "/share/page/dologin";
    private static ObjectMapper om = new ObjectMapper();
    public UserDto userDto ;
    protected Response responce;
    public UserDto authorization(UserDto user) {
         responce =
                 given().contentType("application/x-www-form-urlencoded;charset=UTF-8").baseUri(RestClient.baseUri).body(user)
                .when().post(url);
         user.setJSESSIONID(responce.getSessionId());
         System.out.println(responce.getSessionId());
         return  user;
    }
}

сам тест

@ContextConfiguration(locations = "ru.sibintek.ksed.testBeans.xml")
public class ApprovalCart2layers {
    private UserDto userDto;
    @Autowired
    protected AuthorizationImpl auth;

    @Test
    public void testName() throws IOException,NullPointerException {
     UserDto mike = new UserDto();

        mike.setPassword("111");
        mike.setLogin("111");
        auth.authorization(mike);
    }
}

при запуске - NullPointerException
помогите разобраться почему



(Alexandr D.) #2

(Яна Телегина) #3

да я смотрела этот туториал, но тут пример к конструктору, а мне нужен как раз @Autowired метода


(Alexandr D.) #4

У вас вообще инъекция через поле, что, если мне не изменяет память, является не очень подходом.


#5

a gde @Configuration? ili eto SPring Boot?


(Яна Телегина) #6

добавила внизу скриншот


#7

ia ne rabotal s xml configami, no na naskolko ia ponimaiu iz (https://howtodoinjava.com/spring-mvc/spring-mvc-difference-between-contextannotation-config-vs-contextcomponent-scan/) context:annotation-config ne registriruet java beans. To est’ stoit poprobovat’ context:component-scan


(Яна Телегина) #8

да, я пробовала такой вариант - <context:component-scan base-package=“ru.sibintek.ksed” />
мне кажется я упускаю какую-то фундаментальную мелочь


(Valentin G ) #9

Не работал с этим, но из ошибки возникает такое ощущение, что проблема в логгере.


#10

a cto tam v RestClient?


(Яна Телегина) #11

лишний бин - он нигде не использовался


(Яна Телегина) #12

решила проблему с логером , вот что осталось :


#13

togda zachem AuthorizationImpl extends RestClient? :slight_smile:

ne ochen’ iasno pochemu spring ne mozet swiazat’ AuthorizationImpl. Mozno ssylku na github?


(Дмитрий Еремин) #14

не увидел у вас @RunWith(SpringJUnit4ClassRunner.class)
без раннера, вроде бы, не будет автовайрить


(Яна Телегина) #15

у меня TestNG


(Дмитрий Еремин) #16

ну тогда

@Test
@ContextConfiguration(...)
public class ApprovalCart2layers extends AbstractTestNGSpringContextTests {
}

не?

В общем, мысль в том, что в для TestNG пока никто не сказал, что спринг должен напрячься и что-то автовайрить


(Яна Телегина) #17

стало лучше но
org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name ‘ru.sibintek.ksed.apitest.Scenario.ApprovalCart2layers’: Unsatisfied dependency expressed through field ‘auth’; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type ‘ru.sibintek.ksed.WebApi.AuthorizationImpl’ available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}


(Дмитрий Еремин) #18

во, проблема уже спринговая)
с xml-конфигурациями мало работал.

Если предположить, что в самом xml’е классы указаны верно, то я бы проверял, что корректно указан путь в @ContextConfiguration(locations = "ru.sibintek.ksed.testBeans.xml")

А мож ну его и сделать класс?)
@ContextConfiguration (classes=TestBeans.class)


(Дмитрий Еремин) #19

кста, выглядит так, что у вас в xml бин restClient не до конца написан
атрибут class


(Яна Телегина) #20

а как в TestBeans.class хранить бины?