www.91084.com

GVKun编程网logo

mock.js 和easy-mock使用(mock.js作用)

16

对于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.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数据

#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()之间的区别

如何解决@ 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"));
    }

}

解决方法

创建测试和模拟依赖项时,这三种方法有什么区别?

  1. @MockBean:

    @MockBean
    

    MyService myservice;

  2. @Mock::

    @Mock
    

    MyService myservice;

  3. Mockito.mock()

    MyService myservice = Mockito.mock(MyService.class);
    

@Mock、@MockBean 和 Mockito.mock() 之间的区别

@Mock、@MockBean 和 Mockito.mock() 之间的区别

在创建测试和模拟依赖项时,这三种方法有什么区别?

  1. @MockBean:

    @MockBean

    MyService myservice;

  2. @嘲笑:

    @Mock

    MyService myservice;

  3. 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

android – Robotium与Mockito或Easy Mock

我是 Android测试的新手,如果你们中的一些人可以帮助我,我真的很感激.
我使用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的相关信息,请在本站寻找。

本文标签: