对于mock.js和easy-mock使用感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍mock.js作用,并为您提供关于#mockservice系列#使用RosiemockJS数据、@Moc
对于mock.js 和easy-mock使用感兴趣的读者,本文将会是一篇不错的选择,我们将详细介绍mock.js作用,并为您提供关于#mock service系列# 使用 Rosie mock JS数据、@ Mock,@ MockBean和Mockito.mock()之间的区别、@Mock、@MockBean 和 Mockito.mock() 之间的区别、android – Robotium与Mockito或Easy Mock的有用信息。
本文目录一览:- mock.js 和easy-mock使用(mock.js作用)
- #mock service系列# 使用 Rosie mock JS数据
- @ Mock,@ MockBean和Mockito.mock()之间的区别
- @Mock、@MockBean 和 Mockito.mock() 之间的区别
- android – Robotium与Mockito或Easy Mock
mock.js 和easy-mock使用(mock.js作用)
mock.js
1.项目中引入mock.js
<script src="../static/js/mock.js" type="text/javascript"></script>
2.引入拦截Ajax的js,自己命名,我的是myMock.js
Mock.mock("/getLoginUserId", "get", {
"code": 0, "data": 1, "dataDesc": null, "msg": "操作成功"
});
3.进行Ajax调用
this.$http.get(''/getLoginUser'')
.then(function (res) {
console.log(res)
//{"code": 0, "data": 1, "dataDesc": null, "msg": "操作成功"}
}, function (err) {
console.log(err);
});
注意:带有参数的get请求使用正则匹配url(例如url="/getUserDetail?userId=123")
url这样写RegExp("/getUserDetail" + ".*")
easy-mock
1.打开easy-mock官网,https://www.easy-mock.com/,点击加号
2.进入创建页面,创建项目
3.创建后会跳到首页,点击刚才创建的项目,进入后创建接口
4.填写这些内容后创建
5.然后就可以访问该接口地址了
#mock service系列# 使用 Rosie mock JS数据
Rosie? factory_girl?
如果说是单纯命名上面,是受一幅画的影响,画里面的妹子叫Rosie;
如果是项目灵感其实是来自于factory_girl,factory_girl在github以及segmentfault上的资料都有一些,百度也找得到,但是关于Rosie的着实不多,所以就想share下。
What
Rosie的作用主要就是构建一些js的数据对象,大部分使用场景也是在测试中。
虽然这部分和mock service没有直接的关系,但是因为在整个涉及到api的test过程中(非单元测试),我们的套路一般是用工具生成假的数据对象(结构和真实的一致),然后把数据传给对应的mock service,所以暂时也把本文放在mock service 系列。
How
一般使用npm或者yarn 添加依赖并安装js包就可以使用。
具体使用时候,一般会有一个factory用来构建,另外一个在需要数据的地方进行直接引入。好处是数据构建逻辑和业务处理的逻辑可以隔离。
在object builder 部分
import { Factory } from ''rosie''
export default new Factory()
.sequence(''id'')
.attr(''Type'', () => ''User'')
.attr(''Name'', {first: ''Yangyang'', last:''Cao'')
.attr(''Birthday'':''1992-01-01'')
.attr(''Job'', {company:''TW'',position:''Developer''})
在使用的部分
import ProfileFactory from ''./fixtures/profile''
beforeEach(() => {
parameters = {
ID: ''00124B00000zU5f17AE'',
Profile: ProfileFactory.build()
}
})
其他的使用方法也是存在的,具体请参考github
Why
为什么使用,本人是因为之前每次在before each 或者自己写builder太麻烦了,最常见的是,在一个已有的obeject上面增加新的属性,烦不胜烦。
When
当你厌倦已有的无论是字面量生成mock data,还是单独数据builder 生成mock data的方式。
感觉用Rosie更符合语义以及函数思维。
缺点
暂时没发现,增加了新的依赖算吗?
@ Mock,@ MockBean和Mockito.mock()之间的区别
如何解决@ Mock,@ MockBean和Mockito.mock()之间的区别?
import org.mockito.Mock;
...
@Mock
MyService myservice;
和
import org.mockito.Mockito;
...
MyService myservice = Mockito.mock(MyService.class);
来自Mockito库,功能等效。 它们允许模拟类或接口,并记录和验证其行为。
使用注释的方式更短,因此更可取,并且通常是更可取的。
请注意,要在测试执行期间启用Mockito批注, MockitoAnnotations.initMocks(this)
必须调用静态方法。
为了避免测试之间的副作用,建议在每次测试执行之前先进行以下操作:
@Before
public void initMocks() {
MockitoAnnotations.initMocks(this);
}
启用Mockito批注的另一种方法是@RunWith
通过指定MockitoJUnitRunner
执行此任务的,以及其他有用的东西来注释测试类:
@RunWith(org.mockito.runners.MockitoJUnitRunner.class)
public MyClasstest{...}
这确实是Spring Boot类:
import org.springframework.boot.test.mock.mockito.MockBean;
...
@MockBean
MyService myservice;
该类包含在spring-boot-test
库中。
它允许在Spring中添加Mockito模拟ApplicationContext
。
如果上下文中存在与声明的类兼容的bean,则将其 为模拟。
如果不是的话,它 模拟的背景下,作为一个bean。
Javadoc参考:
可用于将模拟添加到Spring ApplicationContext的注释。
…
如果在上下文中定义的任何现有的相同类型的单个Bean将被模拟代替,如果没有定义现有的Bean,则将添加一个新的。
单元测试旨在与其他组件隔离地测试组件,并且单元测试也有一个要求:执行时间要尽可能快,因为这些测试每天可能在开发人员计算机上执行数十次。
因此,这是一个简单的准则:
当您编写不需要从Spring Boot容器中获取任何依赖项的测试时,遵循经典/普通Mockito的方法是:它快速且有利于隔离测试组件。
如果您的测试需要依赖于Spring Boot容器, 您还想添加或模拟其中一个容器bean:@MockBean
从Spring
Boot就是这样。
当我们编写一个带有@WebMvcTest
(Web测试片)注释的测试类时。
Spring Boot文档很好地总结了这一点:
通常
@WebMvcTest
将仅限于单个控制器,并结合使用@MockBean
以为所需的协作者提供模拟实现。
这是一个例子:
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.springrunner;
import org.springframework.test.web.servlet.mockmvc;
import static org.springframework.test.web.servlet.request.mockmvcRequestBuilders.*;
import static org.springframework.test.web.servlet.result.mockmvcResultMatchers.*;
@RunWith(springrunner.class)
@WebMvcTest(FooController.class)
public class FooControllerTest {
@Autowired
private mockmvc mvc;
@MockBean
private FooService fooServiceMock;
@Test
public void testExample() throws Exception {
Foo mockedFoo = new Foo("one", "two");
Mockito.when(fooServiceMock.get(1))
.thenReturn(mockedFoo);
mvc.perform(get("foos/1")
.accept(MediaType.TEXT_PLAIN))
.andExpect(status().isOk())
.andExpect(content().string("one two"));
}
}
解决方法
创建测试和模拟依赖项时,这三种方法有什么区别?
-
@MockBean:
@MockBean
MyService myservice;
-
@Mock::
@Mock
MyService myservice;
-
Mockito.mock()
MyService myservice = Mockito.mock(MyService.class);
@Mock、@MockBean 和 Mockito.mock() 之间的区别
在创建测试和模拟依赖项时,这三种方法有什么区别?
@MockBean:
@MockBean
MyService myservice;
@嘲笑:
@Mock
MyService myservice;
Mockito.mock()
MyService myservice = Mockito.mock(MyService.class);
答案1
小编典典普通的 Mockito 库
import org.mockito.Mock;...@MockMyService myservice;
和
import org.mockito.Mockito;...MyService myservice = Mockito.mock(MyService.class);
来自 Mockito 库,在功能上是等效的。
它们允许模拟类或接口并记录和验证其行为。
使用注释的方式更短,因此更可取,而且通常更受欢迎。
请注意,要在测试执行期间启用 Mockito 注释, MockitoAnnotations.initMocks(this)
必须调用静态方法。
为避免测试之间的副作用,建议在每次测试执行之前进行:
@Before public void initMocks() { MockitoAnnotations.initMocks(this);}
启用 Mockito 注释的另一种方法是@RunWith
通过指定MockitoJUnitRunner
执行此任务以及其他有用的事情来注释测试类:
@RunWith(org.mockito.runners.MockitoJUnitRunner.class)public MyClassTest{...}
Spring Boot 库包装 Mockito 库
这确实是一个Spring Boot 类:
import org.springframework.boot.test.mock.mockito.MockBean;...@MockBeanMyService myservice;
该类包含在spring-boot-test
库中。
它允许在 Spring 中添加 Mockito 模拟ApplicationContext
。
如果上下文中存在与声明的类兼容的 bean,它会用 mock 替换 它。
如果不是这种情况,它 会将 模拟作为 bean 添加到上下文中。
Javadoc 参考:
可用于将模拟添加到 Spring ApplicationContext 的注释。
…
如果上下文中定义的任何现有的相同类型的单个 bean 将被模拟替换,如果没有定义现有的 bean,则将添加一个新的。
何时使用经典/普通 Mockito 以及何时@MockBean
从 Spring Boot 使用?
单元测试旨在独立于其他组件来测试一个组件,并且单元测试还有一个要求:在执行时间方面尽可能快,因为这些测试可能每天在开发人员机器上执行数十次。
因此,这里有一个简单的指导方针:
当您编写一个不需要来自 Spring Boot 容器的任何依赖项的测试时,经典/普通的 Mockito 是遵循的方式:它速度快并且有利于测试组件的隔离。
如果您的测试需要依赖 Spring Boot 容器 ,并且 您还想添加或模拟容器 bean 之一:@MockBean
来自 Spring Boot
是一种方式。
Spring Boot 的典型用法@MockBean
当我们编写一个用@WebMvcTest
(web test slice) 注释的测试类时。
Spring Boot 文档很好地总结了这一点:
通常
@WebMvcTest
将被限制为单个控制器并结合使用@MockBean
为所需的协作者提供模拟实现。
这是一个例子:
import org.junit.Test;import org.junit.runner.RunWith;import org.mockito.Mockito;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;import org.springframework.boot.test.mock.mockito.MockBean;import org.springframework.http.MediaType;import org.springframework.test.context.junit4.SpringRunner;import org.springframework.test.web.servlet.MockMvc;import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;@RunWith(SpringRunner.class)@WebMvcTest(FooController.class)public class FooControllerTest { @Autowired private MockMvc mvc; @MockBean private FooService fooServiceMock; @Test public void testExample() throws Exception { Foo mockedFoo = new Foo("one", "two"); Mockito.when(fooServiceMock.get(1)) .thenReturn(mockedFoo); mvc.perform(get("foos/1") .accept(MediaType.TEXT_PLAIN)) .andExpect(status().isOk()) .andExpect(content().string("one two")); }}
android – Robotium与Mockito或Easy Mock
我使用robotium作为自动化测试框架(到目前为止一直很好),但我不知道我如何使用mockito或Easy Mock为我的测试添加一些模拟.我真的很困惑.有人能给我一些关于如何实现这个目标的简单例子吗?
提前致谢
解决方法
我不建议使用Mockito进行Android单元测试. Android环境感觉太复杂,无法模拟. Android单元测试的基本方法是在模拟器中运行它们.因此,许多容器类已经存在并且不需要被模拟.
答案很长
我对Android单元测试的世界也相对较新.我一直在编写服务器端单元测试,并发现Mockito是简化单元测试的最佳工具之一. Mockito非常有助于模拟复杂对象的行为.这有助于打破您的测试代码可能对容器(例如servlet容器或Osgi容器)或其他复杂协作者(例如数据库连接类)的依赖关系.
当容器/协作者具有定义良好的接口时,这种模拟效果很好.
几个月前,我决定尝试使用Android开发的Mockito.我发现Mockito确实有用,如果你有至少1.9.5和dexmaker. Dexmaker为Android的Dalvik VM处理运行时字节码生成.
我在第一次测试中尝试的第一件事是模拟android.content.Context,我发现那是很难的.首先,我试图仅模拟我直接调用的方法,但后来我发现这些方法调用了其他依赖于应用程序资源的方法,…最终,模拟变得如此复杂以致于它在第一次使用Mockito时失败了地点.
所以我放弃并开始使用Android单元测试助手类(AndroidTestCase,ActivityUnitTestCase,…).我很沮丧,我现在不得不依赖于模拟器,这意味着SLOW测试执行.也许Mockito仍然在这种类型的测试中占有一席之地.它可能对模拟外部数据源等内容很有用.
无论如何,这只是我的2美分.
关于mock.js 和easy-mock使用和mock.js作用的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于#mock service系列# 使用 Rosie mock JS数据、@ Mock,@ MockBean和Mockito.mock()之间的区别、@Mock、@MockBean 和 Mockito.mock() 之间的区别、android – Robotium与Mockito或Easy Mock的相关信息,请在本站寻找。
本文标签: