gpt4 book ai didi

java - Spring Boot 测试 - 字段注入(inject)引发 NullPointerException

转载 作者:行者123 更新时间:2023-12-02 04:08:43 26 4
gpt4 key购买 nike

我正在 Spring Boot 中为 Rest 应用程序编写测试。

但在我的测试中,CategoryController 中的接口(interface) CategoryService 在运行测试并引发 NullPointerException 时无法 Autowiring 。

CategoryService 在字段级别注入(inject)。

这是我的类(class):

类别 Controller

@RestController
@RequestMapping("/v1/categories")
public class CategoryController {

@Autowired
private CategoryService categoryService;

@RequestMapping
public List<Category> getAll() {
return categoryService.findAll();
}
}

类别服务

@Service
public class CategoryServiceImpl implements CategoryService {

@Autowired
CategoryRepository categoryRepository;

@Override
public List<Category> findAll() {
return categoryRepository.findAll();
}
}

类别RepositoryImpl

@Repository
public class CategoryRepositoryImpl implements CategoryRepository {
@Override
public List<Category> findAll() {
...
}

}

-----测试------

AppTestConfig

@Configuration
public class AppTestConfig {

@Bean
public CategoryRepository categoryRepository() {
return new TestCategoryRepository();
}

@Bean
public CategoryService categoryService() {
return new App.CategoryServiceImpl();
}
}

类别 Controller 测试

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {AppTestConfig.class})
public class CategoryControllerTest {

@Autowired
private CategoryRepository categoryRepository;

@Test
public void testGetAll() throws Exception {
CategoryController controller = new CategoryController();
List<Category> categories = controller.getAll();
assertEquals(categoryRepository.findAll().size(), categories.size());
}
}

通过构造函数注入(inject),一切正常。

有什么问题吗?

最佳答案

您正在使用 new 关键字构造 CategoryController。这样,spring不知道这个对象,因此无法向其中注入(inject)任何东西。

bean应该由spring实例化,就像CategorService一样,被测试的对象可以在spring Configuration类中设置。

如果 spring 创建了 bean,它将 Autowiring 相关属性。

@Autowired
private CategoryController underTest;

关于java - Spring Boot 测试 - 字段注入(inject)引发 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34008574/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com