0

我正在使用弹簧靴 1.4,

当使用 @SpringBootTest 注解进行集成测试时,它会给出一个空指针。

@RunWith(SpringRunner.class);
@SpringBootTest
public class MyControllerTest {
  @Test
  public void mytest {
     when().
            get("/hello").
     then().
            body("hello");
  }
}

对于主要课程:

@SpringApplication
@EnableCaching
@EnableAsync
public class HelloApp extends AsyncConfigureSupport {
  public static void main(String[] args) {
     SpringApplication.run(HelloApp.class, args);
  }

  @Override
  public Executor getAsyncExecutor() {
    ...
  }
}

然后在我的控制器中:

@RestController
public class HelloController {
  @Autowired
  private HelloService helloService;

  @RequestMapping("/hello");
  public String hello() {
    return helloService.sayHello();
  }
}

你好服务

@Service
public class HelloService {
  public String sayHello() {
    return "hello";
  }
}

但是在处理请求时,它会在 helloService 时说 NullPointException。

我错过了什么?

4

2 回答 2

0

当您的控制器正在调用服务时,您需要在测试类中模拟 HelloService 。在您的情况下,您的测试类不知道是否有任何服务可用

于 2017-04-07T10:20:07.387 回答
0

以下示例测试类可能会对您有所帮助。在这个来自 spring的指南中,一个例子展示了如何以 spring 方式集成测试一个 rest 控制器。

@RunWith(SpringRunner.class)
@SpringBootTest
@WebAppConfiguration
public class HelloControllerTest {

    private MockMvc mockMvc;
    @Autowired
    private WebApplicationContext webApplicationContext;

    @Before
    public void setUp() {
        this.mockMvc =  MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
    }

    @Test
    public void hello() throws Exception {
        mockMvc.perform(get("/hello")).andExpect(content().string("hello"));    
    }
}
于 2017-04-07T14:38:41.050 回答