注:启动项目需要spring-boot-test.jar请使用1.4.4.RELEASE以上包含此版本的springboot启动。低版本的没有上面说的那个jar,项目启动mock对象为null。
依赖如下
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.8.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.1.1</version>
</dependency>
service 依赖如下
@Service
public class MessageServiceImpl implements MessageService {
@Autowired
ActionService actionService;
@Override
public String say(String name) {
return actionService.doSay(name);
}
}
测试代码如下
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebAppConfiguration
public class BeanTest {
@Autowired
@InjectMocks//被注入mock对象的类一般是被测试类
MessageService messageService ;
@Mock//需要mock的bean
private ActionService actionService;
@Before
public void setUp() throws Exception {
Mockito.when(actionService.doSay("name")).thenReturn("name");
}
@Test
public void test() {
// 和上面的before 2选1
// when(actionService.doSay(anyString())).thenReturn("helloworld");
System.out.println(messageService.say("name"));
verify(actionService, times(1));
}
}