restapi mock 工具(mock redistemplate)

网友投稿 363 2023-05-04


本篇文章给大家谈谈restapi mock 工具,以及mock redistemplate对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 今天给各位分享restapi mock 工具的知识,其中也会对mock redistemplate进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

一、 Restful API 基于json server mock数据介绍

1. Restul API概述      

 Restful API是一种网络应用程序的设计风格和开发方式,基于HTTP,可以使用XML格式定义或JSON格式定义,它使用URL定位资源,用HTTP动词(GET,POST,DELETE,DETC)描述操作。

2. Restful 特点

Restful

API特点

(1).用URL描述资源。

(2).使用HTTP方法描述行为,使用HTTP状态码表示不同的结果。

(3).使用json交互数据。

   说明1:Restful只是一种风格,并不是强制的标准

   说明2: PUT: 用于替换资源(完整资源),PATCH:用于更新部分资源(部分属性)

3.安装jsonserver  服务器

          cnpm install -g json-server
4.新建db.json 启动服务器

(1).新建db.json

   {

     “users”:[]

  }

(2).  启动json-server

json-server

--watch db.json

然后开启另一个终端: npm start启动应用
5. 使用json-server实现添删改查

(1).添加记录–POST   ---postman中实现
(1).添加记录–POST--- create-react-app中实现

import axios from 'axios'

const insertJson=()={

    axios.post("http://localhost:3000/users",{

        name:"jarry"

      })

}

const

App = () = {

return (

  <

  <button onClick={insertJson}插入数据</button

  </

 );

}

export default App;
(2)查询记录–GET---postman中实现
(2)查询记录–GET-create-react-app中实现

import axios from 'axios'

const getJson=()={

    axios.get("http://localhost:3000/users",{

        params:{

          name:"jarry"

        }

      }) .then(res={

      console.log("res",res);

    })

}

const App = () = {

return (

  <

    <button onClick={getJson}获取数据</button

  </

 );

}

export default App;
(3)修改记录–PATCH     postman中实现
(3)修改记录–PATCH     postman中实现-create-react-app中实现

import axios from 'axios'

const

getJson=()={

    axios.patch("http://localhost:3000/users/2",{

          name:"赵刚"

      })

    .then(res={

      console.log("res",res);

    })

}

const

App = () = {

return (

  <

    <button onClick={getJson}PATCH

修改数据

id:2</button

  </

 );

}

export default App;
(4)DELETE记录–DELETE     postman中实现
(4)DELETE记录–DELETE-create-react-app中实现

import axios from 'axios'

const getJson=()={

    axios.delete("http://localhost:3000/users/3")

    .then(res={

      console.log("res",res);

    })

}

const App = () = {

return (

  <

    <button onClick={getJson}DELETE数据 id:3</button

  </

 );

}

export default App;

java中完成一元稀疏多项式的基本运算

除以上功能外,还有乘法和除法的计算和导数计算呢。
这是我以前做的数据结构课程设计。希望能帮上你的忙。
#include<stdio.h
#include<malloc.h
typedef struct Polynomial{
float coef;
int expn;
struct Polynomial *next;
}*Polyn,Polynomial; //Polyn为结点指针类型
void Insert(Polyn p,Polyn h){
if(p-coef==0) free(p); //系数为0的话释放结点
else{
Polyn q1,q2;
q1=h;q2=h-next;
while(q2p-expn<q2-expn){ //查找插入位置
q1=q2;
q2=q2-next;
}
if(q2p-expn==q2-expn){ //将指数相同相合并
q2-coef+=p-coef;
free(p);
if(!q2-coef){ //系数为0的话释放结点
q1-next=q2-next;
free(q2);
}
}
else{ //指数为新时将结点插入
p-next=q2;
q1-next=p;
}
}
}//Insert
Polyn CreatePolyn(Polyn head,int m){//建立一个头指针为head、项数为m的一元多项式
int i;
Polyn p;
p=head=(Polyn)malloc(sizeof(struct Polynomial));
head-next=NULL;
for(i=0;i<m;i++){
p=(Polyn)malloc(sizeof(struct Polynomial));//建立新结点以接收数据
printf("请输入第%d项的系数与指数:",i+1);
scanf("%f %d",p-coef,p-expn);
Insert(p,head); //调用Insert函数插入结点
}
return head;
}//CreatePolyn
void DestroyPolyn(Polyn p){//销毁多项式p
Polyn q1,q2;
q1=p-next;
q2=q1-next;
while(q1-next){
free(q1);
q1=q2;//指针后移
q2=q2-next;
}
}
void PrintPolyn(Polyn P){
Polyn q=P-next;
int flag=1;//项数计数器
if(!q) { //若多项式为空,输出0
putchar('0');
printf("\n");
return;
}
while (q){
if(q-coef0flag!=1) putchar('+'); //系数大于0且不是第一项
if(q-coef!=1q-coef!=-1){//系数非1或-1的普通情况
printf("%g",q-coef);
if(q-expn==1) putchar('X');
else if(q-expn) printf("X^%d",q-expn);
}
else{
if(q-coef==1){
if(!q-expn) putchar('1');
else if(q-expn==1) putchar('X');
else printf("X^%d",q-expn);
}
if(q-coef==-1){
if(!q-expn) printf("-1");
else if(q-expn==1) printf("-X");
else printf("-X^%d",q-expn);
}
}
q=q-next;
flag++;
}//while
printf("\n");
}//PrintPolyn
int compare(Polyn a,Polyn b){
if(ab){
if(!b||a-expnb-expn) return 1;
else if(!a||a-expn<b-expn) return -1;
else return 0;
}
else if(!ab) return -1;//a多项式已空,但b多项式非空
else return 1;//b多项式已空,但a多项式非空
}//compare
Polyn AddPolyn(Polyn pa,Polyn pb){//求解并建立多项式a+b,返回其头指针
Polyn qa=pa-next;
Polyn qb=pb-next;
Polyn headc,hc,qc;
hc=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点
hc-next=NULL;
headc=hc;
while(qa||qb){
qc=(Polyn)malloc(sizeof(struct Polynomial));
switch(compare(qa,qb)){
case 1:
{
qc-coef=qa-coef;
qc-expn=qa-expn;
qa=qa-next;
break;
}
case 0:
{
qc-coef=qa-coef+qb-coef;
qc-expn=qa-expn;
qa=qa-next;
qb=qb-next;
break;
}
case -1:
{
qc-coef=qb-coef;
qc-expn=qb-expn;
qb=qb-next;
break;
}
}//switch
if(qc-coef!=0){
qc-next=hc-next;
hc-next=qc;
hc=qc;
}
else free(qc);//当相加系数为0时,释放该结点
}//while
return headc;
}//AddPolyn
Polyn SubtractPolyn(Polyn pa,Polyn pb){//求解并建立多项式a+b,返回其头指针
Polyn h=pb;
Polyn p=pb-next;
Polyn pd;
while(p){ //将pb的系数取反
p-coef*=-1;
p=p-next;
}
pd=AddPolyn(pa,h);
for(p=h-next;p;p=p-next) //恢复pb的系数
p-coef*=-1;
return pd;
}//SubtractPolyn
float ValuePolyn(Polyn head,float x){//输入x值,计算并返回多项式的值
Polyn p;
int i;
float sum=0,t;
for(p=head-next;p;p=p-next){
t=1;
for(i=p-expn;i!=0;){
if(i<0){t/=x;i++;}//指数小于0,进行除法
else{t*=x;i--;}//指数大于0,进行乘法
}
sum+=p-coef*t;
}
return sum;
}//ValuePolyn
Polyn Derivative(Polyn head){//求解并建立a的导函数多项式,并返回其头指针
Polyn q=head-next,p1,p2,hd;
hd=p1=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点
hd-next=NULL;
while(q){
if(q-expn!=0){ //该项不是常数项时
p2=(Polyn)malloc(sizeof(struct Polynomial));
p2-coef=q-coef*q-expn;
p2-expn=q-expn-1;
p2-next=p1-next;//连接结点
p1-next=p2;
p1=p2;
}
q=q-next;
}
return hd;
}//Dervative
Polyn MultiplyPolyn(Polyn pa,Polyn pb){//求解并建立多项式a*b,返回其头指针
Polyn hf,pf;
Polyn qa=pa-next;
Polyn qb=pb-next;
hf=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点
hf-next=NULL;
for(;qa;qa=qa-next){
for(qb=pb-next;qb;qb=qb-next){
pf=(Polyn)malloc(sizeof(struct Polynomial));
pf-coef=qa-coef*qb-coef;
pf-expn=qa-expn+qb-expn;
Insert(pf,hf);//调用Insert函数以合并指数相同的项
}
}
return hf;
}//MultiplyPolyn
void DevicePolyn(Polyn pa,Polyn pb){//求解并建立多项式a*b,返回其头指针
Polyn hf,pf,af,temp1,temp2,q;
Polyn qa=pa-next;
Polyn qb=pb-next;
hf=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点,存储商
hf-next=NULL;
pf=(Polyn)malloc(sizeof(struct Polynomial));//建立头结点,存储余数
pf-next=NULL;
temp1=(Polyn)malloc(sizeof(struct Polynomial));
temp1-next=NULL;
temp2=(Polyn)malloc(sizeof(struct Polynomial));
temp2-next=NULL;
temp1=AddPolyn(temp1,pa);
while(qa!=NULLqa-expn=qb-expn){
temp2-next=(Polyn)malloc(sizeof(struct Polynomial));
temp2-next-coef=(qa-coef)/(qb-coef);
temp2-next-expn=(qa-expn)-(qb-expn);
Insert(temp2-next,hf);
pa=SubtractPolyn(pa,MultiplyPolyn(pb,temp2));
qa=pa-next;
temp2-next=NULL;
}
pf=SubtractPolyn(temp1,MultiplyPolyn(hf,pb));
pb=temp1;
printf("商是:");
PrintPolyn(hf);
printf("余数是:");
PrintPolyn(pf);
}//DevicePolyn
int main(){
int m,n,flag=0;
float x;
Polyn pa=0,pb=0,pc,pd,pe,pf;//定义各式的头指针,pa与pb在使用前付初值NULL
printf("请输入a的项数:");
scanf("%d",m);
pa=CreatePolyn(pa,m);//建立多项式a
printf("请输入b的项数:");
scanf("%d",n);
pb=CreatePolyn(pb,n);//建立多项式a
//输出菜单
printf("**********************************************\n");
printf("操作提示:\n\t1.输出多项式a和b\n\t2.建立多项式a+b\n\t3.建立多项式a-b\n");
printf("\t4.计算多项式a在x处的值\n\t5.求多项式a的导函数\n\t6.建立多项式a*b\n");
printf("\t7.建立多项式a/b\n\t8.退出\n**********************************************\n");
for(;;flag=0){
printf("执行操作");
scanf("%d",flag);
if(flag==1){
printf("多项式a:");PrintPolyn(pa);
printf("多项式b:");PrintPolyn(pb);continue;
}
if(flag==2){
pc=AddPolyn(pa,pb);
printf("多项式a+b:");PrintPolyn(pc);
DestroyPolyn(pc);continue;
}
if(flag==3){
pd=SubtractPolyn(pa,pb);
printf("多项式a-b:");PrintPolyn(pd);
DestroyPolyn(pd);continue;
}
if(flag==4){
printf("输入x的值:x=");
scanf("%f",x);
printf("多项式a的值%g\n",ValuePolyn(pa,x));continue;
}
if(flag==5){
pe=Derivative(pa);
printf("多项式a的导函数:");PrintPolyn(pe);
DestroyPolyn(pe);continue;
}
if(flag==6){
pf=MultiplyPolyn(pa,pb);
printf("多项式a*b:");PrintPolyn(pf);
DestroyPolyn(pf);continue;
}
if(flag==7){
DevicePolyn(pa,pb);
continue;
}
if(flag==8) break;
if(flag<1||flag8) printf("Error!!!\n");continue;
}//for
DestroyPolyn(pa);
DestroyPolyn(pb);
return 0;
}

如何在springMVC 中对REST服务使用mockmvc 做测试

spring 集成测试中 对mock 的集成实在是太棒了!但是使用请注意一下3个条件。

junit 必须使用4.9以上

同时您的框架必须是用spring mvc

spring 3.2以上才完美支持

目前使用spring MVC 取代struts2 的很多,spring MVC 的各种灵活让人无比销魂!所以使用spring MVC吧!

以前在对接口(主要是java服务端提供的接口(一般是:webService,restful))进行测试的中 一般用以下俩种方法。测试流程如图:

1 直接使用httpClient

 这方法各种麻烦

2 使用Spring 提供的RestTemplate

 错误不好跟踪,必须开着服务器

使用mockMVC都不是问题了看使用实例:

使用事例如下:父类

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.test.context.ContextConfiguration;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import org.springframework.test.context.web.WebAppConfiguration;

import org.springframework.web.context.WebApplicationContext;

@WebAppConfiguration

@ContextConfiguration(locations = { "classpath:applicationContext.xml",  

"classpath:xxxx-servlet.xml" })

public class AbstractContextControllerTests {

 @Autowired

 protected WebApplicationContext wac;

}

子类:

import org.junit.Before;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.http.MediaType;

import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import org.springframework.test.web.servlet.MockMvc;

import org.springframework.test.web.servlet.setup.MockMvcBuilders;

import com.conlect.oatos.dto.status.RESTurl;

import com.qycloud.oatos.server.service.PersonalDiskService;

//这个必须使用junit4.9以上才有。

@RunWith(SpringJUnit4ClassRunner.class)

public class PersonalDiskMockTests extends AbstractContextControllerTests {

 

 

 private static String URI = RESTurl.searchPersonalFile;

 private MockMvc mockMvc;

 

 private String json ="{\"entId\":1234,\"userId\":1235,\"key\":\"new\"}";

 

 @Autowired

 private PersonalDiskService personalDiskService;

 @Before

 public void setup() {

     //this.mockMvc = webAppContextSetup(this.wac).alwaysExpect(status().isOk()).build();

     this.mockMvc = MockMvcBuilders.standaloneSetup(personalDiskService).build();

 }

@Test

 public void readJson() throws Exception {

     this.mockMvc.perform(

             post(URI, "json").characterEncoding("UTF-8")

                 .contentType(MediaType.APPLICATION_JSON)

                 .content(json.getBytes()))

             .andExpect(content().string("Read from JSON: JavaBean {foo=[bar], fruit=[apple]}")

                 );

 }

上面是简单的例子,实际使用起来可以稍做修改。记得导入spring -test jar 包。无需额外配置(是不是很方便!)

当然和junit 的assert 一起用的话效果更好。下面贴点例子。copy就能跑。

Java代码

package com.qycloud.oatos.server.test.mockmvcTest;

import static org.junit.Assert.fail;

import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;

import java.io.UnsupportedEncodingException;

import java.lang.reflect.Field;

import org.springframework.http.MediaType;

import org.springframework.test.web.servlet.MockMvc;

import com.conlect.oatos.dto.status.CommConstants;

import com.conlect.oatos.dto.status.ErrorType;

import com.conlect.oatos.http.PojoMapper;

public class MockUtil {

 /**

  * mock

  *

  * @param uri

  * @param json

  * @return

  * @throws UnsupportedEncodingException

  * @throws Exception

  */

 public static String mock(MockMvc mvc, String uri, String json)

         throws UnsupportedEncodingException, Exception {

     return mvc

             .perform(

                     post(uri, "json").characterEncoding("UTF-8")

                             .contentType(MediaType.APPLICATION_JSON)

                             .content(json.getBytes())).andReturn()

             .getResponse().getContentAsString();

 }

 

 /**

  *

  * @param re 返回值

  * @param object 要转换的对象

  * @param testName 当前测试的对象

  */

 public static <T void check(String re, Class<T object,String testName) {

     System.out.println(re);

     if (ErrorType.error500.toString().equals(re)) {

         System.out.println("-----该接口测试失败:-----"

                 + testName);

         fail(re);

     } else if (CommConstants.OK_MARK.toString().equals(re)) {

         System.out.println("-----该接口测试成功:-----"

                 + testName);

     }else{

         System.out.println("-----re----- :"+re);

     }

     if (object != null) {

         if (re.contains(":")) {

             try {

                 T t = PojoMapper.fromJsonAsObject(re, object);

                 System.out.println("-----该接口测试成功:-----"

                         + testName);

             } catch (Exception e) {

                 System.out.println("-----该接口测试失败:-----"

                         + testName);

                 fail(e.getMessage());

             }

         }

     }

 }

 /**

  * 初始化版本信息。每次调用测试用力之前首先更新版本信息

  * @param mockMvc

  * @param url

  * @param fileId

  * @param class1

  * @return

  * @throws UnsupportedEncodingException

  * @throws Exception

  */

 public static <T Long updateVersion(MockMvc mockMvc, String url,

         Long fileId, Class<T class1) throws UnsupportedEncodingException, Exception {

     

     String re = mock(mockMvc, url, fileId+"");

     

     T dto = PojoMapper.fromJsonAsObject(re, class1);

     

Long version = Long.parseLong(dto.getClass().getMethod("getVersion").invoke(dto).toString());  

     System.out.println("version = "+version);

     

     return version;

     

 }

 

}

使用如下:

Java代码

@RunWith(SpringJUnit4ClassRunner.class)

public class PersonalDiskMockTests extends AbstractContextControllerTests {

 private MockMvc mockMvc;

 private static Long entId = 1234L;

 private static Long adminId = 1235L;

 @Autowired

 private PersonalDiskService personalDiskService;

 @Before

 public void setup() {

     this.mockMvc = MockMvcBuilders.standaloneSetup(personalDiskService)

             .build();

 }

 /***

  * pass

  * 全局搜索企业文件

  *

  * @throws Exception

  */

 @Test

 public void searchPersonalFile() throws Exception {

     SearchFileParamDTO sf = new SearchFileParamDTO();

     sf.setEntId(entId);

     sf.setKey("li");

     sf.setUserId(adminId);

     String json = PojoMapper.toJson(sf);

     String re = MockUtil.mock(this.mockMvc, RESTurl.searchPersonalFile,

             json);

     MockUtil.check(re, SearchPersonalFilesDTO.class, "searchPersonalFile");

 }

当然@setup里面是每个@test执行时都会执行一次的,所以有些需要每次都实例化的参数可以放进来

如下:

Java代码

@Autowired

 private ShareDiskService shareDiskService;

 @Before

 public void setup() {

     this.mockMvc = MockMvcBuilders.standaloneSetup(shareDiskService)

             .build();

     try {

         initDatas();

     } catch (Exception e) {

         e.printStackTrace();

     }

 }

 

 private void initDatas() throws UnsupportedEncodingException, Exception {

     FileIdVersion = MockUtil.updateVersion(mockMvc,RESTurl.getShareFileById,FileId,ShareFileDTO.class);

     File2IdVersion = MockUtil.updateVersion(mockMvc,RESTurl.getShareFileById,File2Id,ShareFileDTO.class);

     oldPicFolderVersion = MockUtil.updateVersion(mockMvc,RESTurl.getShareFolderById,oldPicFolderId,ShareFolderDTO.class);

 }

ok!基本使用大致如此,代码没有些注释,但是很简单,看懂是没问题的。权当抛砖引玉。希望大家加以指正!

关于restapi mock 工具和mock redistemplate的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。 restapi mock 工具的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于mock redistemplate、restapi mock 工具的信息别忘了在本站进行查找喔。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:接口实现多继承(接口多继承出现方法名冲突)
下一篇:java 实现接口(java 实现接口中的方法)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~