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

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

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
помогите разобраться почему


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

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

a gde @Configuration? ili eto SPring Boot?

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

ia ne rabotal s xml configami, no na naskolko ia ponimaiu iz (Spring MVC: <context:annotation-config> vs <context:component-scan> - HowToDoInJava) context:annotation-config ne registriruet java beans. To est’ stoit poprobovat’ context:component-scan

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

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

a cto tam v RestClient?

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

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

togda zachem AuthorizationImpl extends RestClient? :slight_smile:

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

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

1 лайк

у меня TestNG

ну тогда

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

не?

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

1 лайк

стало лучше но
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)}

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

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

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

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

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