在测试@RestController时注入模拟服务

时间:2016-01-18 12:36:30

标签: spring unit-testing spring-boot

我正在测试一个用pom.xml注释的REST控制器,我想注入模拟服务。

我在这里寻求帮助spring boot ones但没有运气。

我正在使用以下注释开始测试spring-boot应用程序:

@RestController

其中@RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = Application.class) @WebIntegrationTest Application.class注释,但似乎我找不到一种方法来为我的控制器注入模拟依赖,例如这样做:

@SpringBootApplication

这是我看到的堆栈跟踪,它在进入超时后失败,因为它试图将所有依赖项注入数据库(我正试图避免尝试在服务级别引入模拟):

@Mock
private BlogPostService blogPostService;

@Before
public void setUp() throws Exception {
    MockitoAnnotations.initMocks(this);
}

1 个答案:

答案 0 :(得分:3)

您正在使用Mockito,为什么不使用Mockito测试跑步者?

使用以下注释代替使用您提供的注释注释测试:

@RunWith(MockitoJUnitRunner.class)

例如:

@RunWith(MockitoJUnitRunner.class)
public class MyControllerTest {

}

要在控制器中注入模拟Mockito,请使用:

@RunWith(MockitoJUnitRunner.class)
public class MyControllerTest {
    @InjectMocks
    private MyController controller;
    @Mock
    private BlogPostService service;
}

在这种情况下,Mockito将创建MyController(您的REST控制器)的新实例,并在控制器的所有字段中使用给定字段注入类型为BlogPostService的模拟。

您提供的注释非常适合集成测试,但是当您将控制器作为一个单元进行测试时,您不需要它们。 如果你是集成测试,那么嘲笑服务也不对。