2017-01-18 4 views
0

Пожалуйста, знайте, что я подробно исследовал этот вопрос как на этом веб-сайте, так и в других местах, но предлагаемые решения не сработали для меня.Spring RESTful (Gradle): @Полученные результаты в NullPointerException

Я могу запустить приложение Spring без проблем (bootRun), поэтому я предполагаю, что это только проблема, связанная с jUnit. Когда я пытаюсь запустить тест Gradle или JUnit в классе SearchControllerUnitTest, я получаю исключение NullPointerException.

Может ли кто-нибудь указать, где моя конфигурация неверна?

Спасибо!

SearchControllerUnitTest.java

@Category(UnitTest.class) 
    @RunWith(SpringJUnit4ClassRunner.class) 
    @ContextConfiguration(classes = AppConfig.class) 
    public class SearchControllerUnitTest extends UnitTest { 

     private MockMvc mockMvc; 

     @Override 
     @Before 
     public void setUp() { 
      super.setUp(); 
      mockMvc = MockMvcBuilders.standaloneSetup(new SearchController()).build(); 
     } 

    @Test 
    public void getProductTest() throws Exception { 
     . . . 
    } 

SearchController.java

@RestController 
    public class SearchController { 

     public static final Logger log = LoggerFactory.getLogger(SearchController.class); 

     @Autowired 
     Product product; // <<< autowiring not working in jUnit only 

     @Autowired 
     ProductService productService; // <<< autowiring not working in jUnit only 

     @RequestMapping(value = "/search", method = RequestMethod.GET, produces = "application/json") 
     public ResponseEntity<Product> getProduct(@RequestParam(value = "name", required = true) String name) { 

      if (productService == null) { 
       log.info("productService is null!!"); 
      } 
      . . . 

      product = productService.getProduct(name); // <<<< NPE here 
     } 

ProductService.java

public interface ProductService { 
     . . . 
     public Product getProduct(String productName); 
     . . . 
    } 

ProductServiceImpl.java

@Service 
    public class ProductServiceImpl implements ProductService { 

     public Product getProduct(String productName){ 
      . . . 
     } 

    } 

Исключение:

Caused by: java.lang.NullPointerException 
    at com.somepckagename.controller.SearchController.getProduct(SearchController.java:36) 
+0

У вас есть определенная проводка для тестового контекста? – Makoto

ответ

1

Вы создаете экземпляр SearchController самостоятельно в строке mockMvc = MockMvcBuilders.standaloneSetup(new SearchController()).build();. Если вы это сделаете, автоуслуги, конечно, не сработают, потому что Spring не знает, что это боб.

Вместо создания поля в тесте, чтобы ввести контроллер:

@Autowired 
private SearchController controller; 

и использовать этот экземпляр. Также это идеальная причина для использования инъекции конструктора вместо инъекции в поле.

+0

Большое спасибо. Это сделал трюк. Я новичок в Spring и до сих пор учился. :) – BustedSanta

 Смежные вопросы

  • Нет связанных вопросов^_^