调用mock对象的方法时,不会执行真实的方法,而是返回类型的默认值,如object返回null, int返回0等,否则通过指定when(方法).thenreturn(value)来指定方法的返回值。同时mock对象可以进行跟踪,使用verify方法看是否已经被调用过。而spy对象,默认会执行真实方法,返回值可以通过when.thenreturn进行覆盖。可见mock只要避开了执行一些方法,直接返回指定的值,方便做其他测试。
service测试用例需要的依赖
<dependency> <groupid>junit</groupid> <artifactid>junit</artifactid> <version>4.12</version> <scope>test</scope> </dependency> <dependency> <groupid>org.mockito</groupid> <artifactid>mockito-core</artifactid> <version>2.23.4</version> <scope>test</scope> </dependency> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-test</artifactid> <version>2.1.13.release</version> </dependency>
代码示例
@runwith(mockitojunitrunner.class)@springboottest()public class studentservicetest { @injectmocks studentservice studentservice = new studentserviceimpl(); @mock studentdao studentdao; @before public void before(){ mockito.doreturn(new studentdo(张三, 18)).when(studentdao).read(mockito.anystring()); } @test public void testread(){ studentdo read = studentservice.read(); assert.assertnotnull(read); }}
controller测试用例需要的依赖
<dependency> <groupid>org.springframework</groupid> <artifactid>spring-test</artifactid> <version>5.1.14.release</version> </dependency> <dependency> <groupid>com.jayway.jsonpath</groupid> <artifactid>json-path</artifactid> <version>2.4.0</version> </dependency>
代码示例
@runwith(mockitojunitrunner.class)@springboottest()public class studentcontrollertest { @resource mockmvc mockmvc; @injectmocks studentcontroller studentcontroller; @mock studentservice studentservice; @before public void before() { mockmvc = mockmvcbuilders.standalonesetup(studentcontroller).build(); mockito.doreturn(new studentdo(张三, 18)).when(studentservice).read(mockito.anystring()); } @test public void testread() throws exception { mockhttpservletrequestbuilder request = mockmvcrequestbuilders.get(/student/read/1); mockmvc.perform(request) .anddo(print()) .andexpect(status().isok()) .andexpect(jsonpath($.name).value(张三)); }}
以上就是java单元测试mockito如何用的详细内容。