java - Spring 测试和 NullPointerException

标签 java spring spring-mvc testing mockito

我必须测试一些 Spring Controller 。我用模仿。但是当我测试一个特定的路由时, Controller 中的链接函数不能使用依赖性(NullPointerException),因为 Autowired 注释不起作用。

在我的代码下面:

测试类:

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class ClassTest {

        @InjectMocks
        private abcController abc;
        private MockMvc mockMvc;

        @Before
        public void setup() throws IOException {

            MockitoAnnotations.initMocks(this);
            this.mockMvc = MockMvcBuilders.standaloneSetup(abc).build();
        }


        @Test
        public void test1() throws Exception {
            this.mockMvc.perform(get("/api/abc/"))
                        .andExpect(status().isOk())
                        .andExpect(jsonPath("$[0]", is("a")))
                        .andExpect(jsonPath("$[1]", is("b")));
        }

Controller(这里发生 NullPointer 异常 databaseHandler 为 null):

@RestController
@ComponentScan("com.example.*")
@Repository(value="abcController")
public class abcController extends BaseController {


    @Autowired
    @Qualifier("DatabaseHandler")
    DatabaseHandlerInt databaseHandler;

    @RequestMapping(value = "/api/abc", method = RequestMethod.GET)
    public @ResponseBody ArrayList getContent() throws Exception {
        // Null pointer happend here
        return databaseHandler.example();
    }

我认为这是因为测试类缺少配置,但我找不到修复它的方法。

谢谢

最佳答案

最好的方法是在单元测试中以这种方式使用 @MockBean 注释,并从测试中删除 mockito 特定代码:

@MockBean
private DatabaseHandlerInt databaseHandler;

这样 mock 将由 Spring 注入(inject),您可以使用通常的 Mockito.when() 样式来使用您的 mock。 查看https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-testing.html了解更多信息。

关于java - Spring 测试和 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45058979/

相关文章:

ajax - 使用 Jackson 解析器在 Spring MVC 中映射 JSON 数据

java - Spring - 用于发送邮件的异步队列

java - POI 的 HSSF 数据格式 - 支持哪些颜色?

hibernate - org.hibernate.id.IdentifierGenerationException : attempted to assign id from null one-to-one property

java - Spring Boot Actuator的DataSourcesHealthIndicatorConfiguration找不到dataSource bean

javascript - 如何使用 Spring MVC 和 ThymeLeaf 正确验证复选框?

java - Dojo 和 Java 中的 AJAX PUSH(流)实现

java - GUI 未显示在我的屏幕上

java - 我可以在没有 Message Broker 的情况下使用 Spring Integration

java - 当没有创建资源时,我应该为 POST 返回什么 HTTP 状态代码?