简体   繁体   中英

Spring - Autowired is null - Test - UnsatisfiedDependencyException: Error creating bean with name

I'm trying to test my application, I've been trying to solve it for 3 days and I looked for stackoverflow and I still couldn't solve it. My problem is that Autowired is always null, and even though I import everything suggested as

@RunWith( SpringRunner.class )
@SpringBootTest
public class ESGControllerTest {
    @Autowired
    private ESGController esgController ;
    @Test
    public void deveRetornarSucesso_QuandoBuscarLatLong(){
        System.out.println(this.esgController);
    }

}

or

@RunWith( SpringJUnit4ClassRunner.class )
@ContextConfiguration
public class ESGControllerTest {
    @Autowired
    private ESGController esgController ;
    @Test
    public void deveRetornarSucesso_QuandoBuscarLatLong(){
        System.out.println(this.esgController);
    }

}

is always null and gives this error

在此处输入图像描述

EDIT: ESGController

package br.com.kmm.esgeniusapi.controller;

import br.com.kmm.esgeniusapi.dto.CargaDTO;
import br.com.kmm.esgeniusapi.dto.CargaFilter;
import br.com.kmm.esgeniusapi.entity.AreaEmbargada;
import br.com.kmm.esgeniusapi.entity.Carga;
import br.com.kmm.esgeniusapi.entity.ConfiguracaoCarga;
import br.com.kmm.esgeniusapi.exception.CargaException;
import br.com.kmm.esgeniusapi.inteface.HereReverseGeocode;
import br.com.kmm.esgeniusapi.inteface.HereSearch;
import br.com.kmm.esgeniusapi.service.CargaService;
import br.com.kmm.esgeniusapi.service.ConfiguracaoCargaService;
import br.com.kmm.esgeniusapi.service.IbamaService;
import br.com.kmm.esgeniusapi.service.ReverseGeocodeService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.*;

import javax.annotation.security.RolesAllowed;
import java.beans.IntrospectionException;
import java.lang.reflect.InvocationTargetException;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Slf4j
@RestController
@CrossOrigin(origins = "*", maxAge = 3600)
@RequestMapping("/api/")
@RolesAllowed("VIEW")
@Component
public class ESGController {

    @Autowired
    ReverseGeocodeService reverseGeocodeService;

    @Autowired
    IbamaService ibamaService;

    @Autowired
    CargaService cargaService;

    @Autowired
    ConfiguracaoCargaService configuracaoCargaService;

    @GetMapping(path = "reverse-geocode")
    public HereReverseGeocode getRoute(@RequestParam final String location) {
        Double lat = Double.parseDouble(location.split(",")[0]);
        Double lon = Double.parseDouble(location.split(",")[1]);
        return this.reverseGeocodeService.getReverseGeocoding(lat, lon);
    }

    @GetMapping(path = "search")
    public List<HereSearch> search(@RequestParam(name = "q") final String query) {
        return this.reverseGeocodeService.search(query);
    }
     ....{
    //MORE FUNCTIONS
     }
}

I edited and put the ESGController as code for more information.

Is ESGController decorated with @Controller or equivalent so that a bean of that class actually exist in the context?

Is the test class in the same package hierarchy as the rest of the application?

@SpringBootTest by default starts searching in the current package of the test class and then searches upwards through the package structure, looking for a class annotated with @SpringBootConfiguration from which it then reads the configuration to create an application context.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM