Spring mvc 之Junit 单元测试 Controller中方法
Springmvc 之Junit 单元测试
1. 首先引入测试的jar包。
1.1因为我用的ide是eclipse,现只介绍eclipse中junit的使用。首先引用eclipse中自带的junit,
方法:
右键项目—>property---->如下图所示
1.2 因为是要测试junit对springmvc中Controller的单元测试,故要引入Spring-test jar包
引入方式
<!-- Spring 单元测试包 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>${spring.version}</version>
<!-- 表是测试时才引用,发布时去掉 -->
<scope>test</scope>
2. 建立测试的Controller,代码如下
packageorg.xxz.controller;
importjava.util.List;
importjavax.annotation.Resource;
importorg.springframework.stereotype.Controller;
importorg.springframework.ui.ModelMap;
importorg.springframework.web.bind.annotation.RequestBody;
importorg.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
importorg.springframework.web.bind.annotation.ResponseBody;
importorg.xxz.domain.Comment;
importorg.xxz.service.CommentService;
importcom.alibaba.fastjson.JSONObject;
@Controller
public class WelcomeController{
@Resource
private CommentService commentService;
@RequestMapping(value = "/test")
public String test(ModelMap model) {
model.put("key", "helloqq-comment");
return "test";
}
@RequestMapping(value = "/test1")
@ResponseBody
public String test1() {
return "test";
}
/**单参数测试get**/
@RequestMapping(value ="/comment")
public String comment(String itemId,ModelMap model) {
List<Comment> itemComments =commentService.findCommentByItemId(itemId, 1, 10);
model.put("itemComments",itemComments);
return "comment";
}
/**responseBody 测试**/
@RequestMapping(value ="/comment1")
@ResponseBody
public String comment1(String itemId,ModelMap model) {
List<Comment> itemComments =commentService.findCommentByItemId(itemId, 1, 10);
model.put("itemComments",itemComments);
return "comment";
}
/**post方式测试Controller**/
@RequestMapping(value ="/comment2",method=RequestMethod.POST)
public String comment2(String itemId,ModelMap model) {
List<Comment> itemComments =commentService.findCommentByItemId(itemId, 1, 10);
model.put("itemComments",itemComments);
return "comment";
}
/**多参数get测试**/
@RequestMapping(value ="/comment4")
public String comment4(String itemId,Stringa, ModelMap model) {
List<Comment> itemComments =commentService.findCommentByItemId(itemId, 1, 10);
model.put("itemComments",itemComments);
System.out.println(itemId +"##########"+ a);
return "comment";
}
/**多参数Post测试**/
@RequestMapping(value ="/comment5",method=RequestMethod.POST)
public String comment5(String itemId,Stringa, ModelMap model) {
List<Comment> itemComments =commentService.findCommentByItemId(itemId, 1, 10);
model.put("itemComments",itemComments);
System.out.println(itemId +"##########"+ a);
return "comment";
}
/**进行增加操作**/
@RequestMapping(value ="/comment6",method=RequestMethod.POST)
public String comment6(String itemId,Stringa, ModelMap model) {
System.out.println(itemId+a);
Commentc=new Comment();
c.setId("666");
c.setContentId("666");
c.setParentCommentId("6666");
c.setCustomerId("666");
try{
commentService.addcomment(c);
} catch (Exception e) {
e.printStackTrace();
}
return "success";
}
/**测试传输数据为json格式**/
@RequestMapping(value ="/comment7",method=RequestMethod.POST)
public String comment7(@RequestBodyJSONObject jobj , ModelMap model) {
System.out.println(jobj.get("id"));
//System.out.println(jobj);
return "success";
}
}
3. 根据源Controller建立相应的测试类 WelcomeControllerTest.java
3.1首先介绍一下我的文档结构如下图所示,我建立了一个专门测试的包,命名为test。所有的测试代码放于此,方便管理和查看。
3.2 使用Eclipse自带工具生成相应的测试类 右击要测试的Controller————>选择Junit Test Case(如果没有的话,选择Other 搜索 junit即可找到)
在此我这只勾选了setup(), 然后点击下一步,勾选相应的方法进行测试。点击完成就会生成相应的测试类 WelcomeControllerTest.java。
3.3. WelcomeControllerTest.java 代码如下
package org.xxz.test;
importstaticorg.junit.Assert.*;
import java.util.List;
import javax.annotation.Resource;
import org.junit.Before;
import org.junit.Ignore;
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.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.ResultActions;
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.WebApplicationContext;
import org.xxz.domain.Comment;
import org.xxz.service.CommentService;
import com.alibaba.fastjson.JSONObject;
importstaticorg.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
importstaticorg.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
/**
* @author :hanzl
* @version创建时间:2018年1月5日上午9:53:45
*/
publicclassWelcomeControllerTest extends BaseJunitTest {
@Resource
privateCommentService commentService;
@Autowired
privateWebApplicationContext webApplicationContext;
privateMockMvc mockMvc;
//方法执行前初始化数据
@Before
publicvoid setUp() throws Exception {
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
@Ignore//忽略此方法
publicvoid testTest() {
System.out.println("hello");
}
@Ignore//忽略此方法
publicvoid testTest1() {
fail("Not yet implemented");
}
@Test
publicvoid testComment() throws Exception {
/***第一种测试方式,直接copy原方法中逻辑代码 直接输出结果*/
/*List<Comment> itemComments =commentService.findCommentByItemId("1", 1, 10);
for(Commentc:itemComments){
System.out.println(c.getContent());
}*/
/**第二种方法,利用MockMVC模拟get方法访问**/
/*MockHttpServletRequestBuildermockHttpServletRequestBuilder = MockMvcRequestBuilders.get("/comment" );
mockHttpServletRequestBuilder.param("itemId", "1" ); //要传入的参数
ResultActionsresultActions = mockMvc.perform( mockHttpServletRequestBuilder );
resultActions.andExpect(status().isOk());*/
/**第三种测试方法针对get请求 Controller默认的请求方法是get*/
/*String responseString = mockMvc.perform(MockMvcRequestBuilders.get("/comment").contentType(MediaType.APPLICATION_FORM_URLENCODED).param("itemId","1") //数据的格式 .contentType(MediaType.APPLICATION_FORM_URLENCODED) 数据的格式请求的url,请求的方法是get.contentType(MediaType.APPLICATION_FORM_URLENCODED) //数据的格式.param("pcode","root") //添加参数
).andExpect(status().isOk()) //返回的状态是200
.andDo(print()) //打印出请求和相应的内容
.andReturn().getResponse().getContentAsString();
System.out.println("哈哈哈"+responseString); //在Controller 中加 @ResponseBody 可输出要返回的内容
}*/
/**第四种测试方法针对 Post请求 Controller注解加上 method=RequestMethod.POST 只需要将第三种方法的get 换为post即可*/
/*String responseString = mockMvc.perform(MockMvcRequestBuilders.post("/comment").contentType(MediaType.APPLICATION_FORM_URLENCODED).param("itemId","1") //数据的格式 .contentType(MediaType.APPLICATION_FORM_URLENCODED) 数据的格式请求的url,请求的方法是get.contentType(MediaType.APPLICATION_FORM_URLENCODED) //数据的格式.param("pcode","root") //添加参数
).andExpect(status().isOk()) //返回的状态是200
.andDo(print()) //打印出请求和相应的内容
.andReturn().getResponse().getContentAsString();
System.out.println("哈哈哈"+responseString); //在Controller 中加 @ResponseBody 可输出要返回的内容
*/
/**传入多个参数测试get*/
/*String responseString = mockMvc.perform(MockMvcRequestBuilders.get("/comment").contentType(MediaType.APPLICATION_FORM_URLENCODED).param("itemId","1").param("a","hanzl") //数据的格式 .contentType(MediaType.APPLICATION_FORM_URLENCODED) 数据的格式请求的url,请求的方法是get.contentType(MediaType.APPLICATION_FORM_URLENCODED) //数据的格式.param("pcode","root") //添加参数
).andExpect(status().isOk()) //返回的状态是200
.andDo(print()) //打印出请求和相应的内容
.andReturn().getResponse().getContentAsString();
System.out.println("哈哈哈"+responseString);
}*/
/**传入多个参数测试post**/
/*String responseString = mockMvc.perform(MockMvcRequestBuilders.post("/comment5").contentType(MediaType.APPLICATION_FORM_URLENCODED).param("itemId","1").param("a","hanzl") //数据的格式 .contentType(MediaType.APPLICATION_FORM_URLENCODED) 数据的格式请求的url,请求的方法是get.contentType(MediaType.APPLICATION_FORM_URLENCODED) //数据的格式.param("pcode","root") //添加参数
).andExpect(status().isOk()) //返回的状态是200
.andDo(print()) //打印出请求和相应的内容
.andReturn().getResponse().getContentAsString();
System.out.println("哈哈哈"+responseString);
}*/
/**测试数据库添加数据测试**/
/*String responseString = mockMvc.perform(MockMvcRequestBuilders.post("/comment6").contentType(MediaType.APPLICATION_FORM_URLENCODED).param("itemId","1").param("a","hanzl") //数据的格式 .contentType(MediaType.APPLICATION_FORM_URLENCODED) 数据的格式请求的url,请求的方法是get.contentType(MediaType.APPLICATION_FORM_URLENCODED) //数据的格式.param("pcode","root") //添加参数
).andExpect(status().isOk()) //返回的状态是200
.andDo(print()) //打印出请求和相应的内容
.andReturn().getResponse().getContentAsString();
System.out.println("哈哈哈"+responseString);
}*/
/**测试请求参数为json时**/
Comment c=new Comment();
c.setId("666");
c.setContentId("666");
c.setParentCommentId("6666");
c.setCustomerId("666");
String requestJson = JSONObject.toJSONString(c);
String responseString = mockMvc.perform( MockMvcRequestBuilders.post("/comment7").contentType(MediaType.APPLICATION_JSON).content(requestJson) //数据的格式 .contentType(MediaType.APPLICATION_FORM_URLENCODED) 数据的格式请求的url,请求的方法是get.contentType(MediaType.APPLICATION_FORM_URLENCODED) //数据的格式.param("pcode","root") //添加参数
).andExpect(status().isOk()) //返回的状态是200
.andDo(print()) //打印出请求和相应的内容
.andReturn().getResponse().getContentAsString();
System.out.println("哈哈哈"+responseString);
}
}
4. 建立测试基类BaseJunitTest.java,加载相应的基本信息,方便拓展,WelcomeComtrollerTest继承BaseJunitTest.java
BaseJunitTest 代码如下:
解释说明:
@webappconfiguration是一级注释,用于声明一个ApplicationContext集成测试加载WebApplicationContext。作用是模拟ServletContext
@ContextConfiguration:因为controller,component等都是使用注解,需要注解指定spring的配置文件,扫描相应的配置,将类初始化等
package org.xxz.test;
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.transaction.annotation.Transactional;
/**
* @author :hanzl
* @version创建时间:2018年1月5日上午10:21:45
*/
@RunWith(SpringJUnit4ClassRunner.class)
//配置事务的回滚,对数据库的增删改都会回滚,便于测试用例的循环利用
@TransactionConfiguration(transactionManager= "transactionManager", defaultRollback = true)
@Transactional
@WebAppConfiguration
@ContextConfiguration(locations = { "classpath:spring.xml","classpath:spring-mvc.xml"})
publicclassBaseJunitTest {
}
5. 实际测试 spring mvc 请求方式为get(spring mvc默认请求方式为get)参数为一个
5.1 Controller测试代码方法:
/**单参数测试get**/
@RequestMapping(value ="/comment")
public String comment(String itemId,ModelMap model) {
List<Comment> itemComments =commentService.findCommentByItemId(itemId, 1, 10);
model.put("itemComments",itemComments);
return "comment";
}
5.2 测试类中代码方法:
/***第一种测试方式,直接copy原方法中逻辑代码 直接输出结果*/
/*List<Comment>itemComments = commentService.findCommentByItemId("1", 1, 10);
for(Commentc:itemComments){
System.out.println(c.getContent());
}*/
6. 利用利用MockMVC模拟get方法访问测试
6.1 Controller中方法代码不用变
6.2 测试类 中方法代码如下:
MockHttpServletRequestBuildermockHttpServletRequestBuilder = MockMvcRequestBuilders.get("/comment" );
mockHttpServletRequestBuilder.param("itemId", "1" ); //要传入的参数
ResultActionsresultActions = mockMvc.perform( mockHttpServletRequestBuilder );
resultActions.andExpect( status().isOk());
7. 第三种测试方法针对get请求 Controller默认的请求方法是get
7.1 Controller中方法不变
7.2 测试类中代码如下:
StringresponseString= mockMvc.perform(MockMvcRequestBuilders.get("/comment").contentType(MediaType.APPLICATION_FORM_URLENCODED).param("itemId","1") //数据的格式 .contentType(MediaType.APPLICATION_FORM_URLENCODED) 数据的格式请求的url,请求的方法是get.contentType(MediaType.APPLICATION_FORM_URLENCODED) //数据的格式.param("pcode","root") //添加参数
).andExpect(status().isOk()) //返回的状态是200
.andDo(print()) //打印出请求和相应的内容
.andReturn().getResponse().getContentAsString();
System.out.println("哈哈哈"+responseString);
8. 第四种测试方法 针对 Post请求 Controller注解加上 method=RequestMethod.POST 只需要将第三种方法的get 换为post即可
8.1 Controller中代码:
/**post方式测试Controller**/
@RequestMapping(value = "/comment2",method=RequestMethod.POST)
public String comment2(String itemId, ModelMap model) {
List<Comment> itemComments =commentService.findCommentByItemId(itemId, 1, 10);
model.put("itemComments", itemComments);
return "comment";
}
8.2测试方法代码:
StringresponseString = mockMvc.perform(MockMvcRequestBuilders.post("/comment").contentType(MediaType.APPLICATION_FORM_URLENCODED).param("itemId","1") //数据的格式 .contentType(MediaType.APPLICATION_FORM_URLENCODED) 数据的格式请求的url,请求的方法是get.contentType(MediaType.APPLICATION_FORM_URLENCODED) //数据的格式.param("pcode","root") //添加参数
).andExpect(status().isOk()) //返回的状态是200
.andDo(print()) //打印出请求和相应的内容
.andReturn().getResponse().getContentAsString();
System.out.println("哈哈哈"+responseString);
9. 测试get方法传入多个参数
9.1 Controller中代码:
/**多参数get测试**/
@RequestMapping(value= "/comment4")
publicString comment4(String itemId,String a, ModelMap model) {
List<Comment> itemComments = commentService.findCommentByItemId(itemId, 1, 10);
model.put("itemComments", itemComments);
System.out.println(itemId + "##########"+ a);
return"comment";
}
9.2 测试方法代码:
String responseString = mockMvc.perform(MockMvcRequestBuilders.get("/comment").contentType(MediaType.APPLICATION_FORM_URLENCODED).param("itemId","1").param("a", "hanzl") //数据的格式 .contentType(MediaType.APPLICATION_FORM_URLENCODED) 数据的格式请求的url,请求的方法是get.contentType(MediaType.APPLICATION_FORM_URLENCODED) //数据的格式.param("pcode","root") //添加参数
).andExpect(status().isOk()) //返回的状态是200
.andDo(print()) //打印出请求和相应的内容
.andReturn().getResponse().getContentAsString();
System.out.println("哈哈哈"+responseString);
10. 传入多个参数测试post
10.1 Controller中代码
/**多参数Post测试**/
@RequestMapping(value= "/comment5",method=RequestMethod.POST)
publicString comment5(String itemId,String a, ModelMap model) {
List<Comment> itemComments = commentService.findCommentByItemId(itemId, 1, 10);
model.put("itemComments", itemComments);
System.out.println(itemId + "##########"+ a);
return"comment";
}
10.2 测试方法中代码:
String responseString = mockMvc.perform(MockMvcRequestBuilders.post("/comment5").contentType(MediaType.APPLICATION_FORM_URLENCODED).param("itemId","1").param("a", "hanzl") //数据的格式 .contentType(MediaType.APPLICATION_FORM_URLENCODED) 数据的格式请求的url,请求的方法是get.contentType(MediaType.APPLICATION_FORM_URLENCODED) //数据的格式 .param("pcode","root") //添加参数
).andExpect(status().isOk()) //返回的状态是200
.andDo(print()) //打印出请求和相应的内容
.andReturn().getResponse().getContentAsString();
System.out.println("哈哈哈"+responseString);
}
11. 测试数据库添加数据测试测试session回滚
11.1 Controller中代码:
@RequestMapping(value = "/comment6",method=RequestMethod.POST)
publicString comment6(String itemId,String a, ModelMap model) {
System.out.println(itemId+a);
Comment c=new Comment();
c.setId("666");
c.setContentId("666");
c.setParentCommentId("6666");
c.setCustomerId("666");
try {
commentService.addcomment(c);
}catch(Exception e) {
e.printStackTrace();
}
return"success";
}
11.2 测试方法代码不变
12. 测试请求数据为json时,参数为json时
12.1Controller中方法代码:
/**测试传输数据为json格式**/
@RequestMapping(value= "/comment7",method=RequestMethod.POST)
publicString comment7(@RequestBody JSONObject jobj, ModelMap model){
System.out.println(jobj.get("id"));
//System.out.println(jobj);
return"success";
}
12.2测试中方法代码:
/**测试请求参数为json时**/
Comment c=new Comment();
c.setId("666");
c.setContentId("666");
c.setParentCommentId("6666");
c.setCustomerId("666");
String requestJson = JSONObject.toJSONString(c);
String responseString = mockMvc.perform(MockMvcRequestBuilders.post("/comment7").contentType(MediaType.APPLICATION_JSON).content(requestJson) //数据的格式 .contentType(MediaType.APPLICATION_FORM_URLENCODED) 数据的格式请求的url,请求的方法是get.contentType(MediaType.APPLICATION_FORM_URLENCODED) //数据的格式.param("pcode","root") //添加参数
).andExpect(status().isOk()) //返回的状态是200
.andDo(print()) //打印出请求和相应的内容
.andReturn().getResponse().getContentAsString();
System.out.println("哈哈哈"+responseString);
}
13. 以上所有的情况均已试过,特别感谢两篇文章在此贴下连接,如有不足,请见谅!
https://www.cnblogs.com/0201zcr/p/5756642.html
https://www.cnblogs.com/puyangsky/p/6661638.html
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- [MATLAB]安装MinGW C/C++ 编译器
①下载MinGW C/C++ 编译器下载地址:http://tdm-gcc.tdragon.net/download②运行下载好的exe文件,出现如下页面,在右边选择安装路径如果没有安装过MinGW C/C++编辑器,点击Create;如果安装过MinGW C/C++编辑器,想要修复,点击Manage;如果想要卸载安装好的MinGW C/C++编辑器…...
2024/4/17 11:13:29 - 修改AppDelegate文件名
打开你的Appdelegate.m 把光标选中到@implementation AppDelegate 的AppDelegate上面,意思选中该类;点击Xcode的Edit->Refactor->Rename ;再出现的框里面填上你的要更改成的名字smicappdelegate,点击Peview;然后确定一下文件中要改的部分,无误之后,点击save,点击…...
2024/4/17 8:27:27 - 想念我的兄弟
长歌当哭 兄弟已逝... 我与兄弟相识大概有五年了吧。 从来没有见过面,严格的说是网友。 兄弟和我的共同爱好就是数学。当然我只是业余,算不上科班。兄弟是科班,但还没有成家。 einstain,meirenzhidao,gauss,安分的心,dajiahao,mingzi ... 都是兄弟的昵称。 研究数学的,…...
2024/4/17 20:10:00 - fatal error C1001: 编译器中发生内部错误
问题描述: 1>d:*.cpp(144) : fatal error C1001: 编译器中发生内部错误。 1>(编译器文件“F:\SP\vctools\compiler\utc\src\P2\main.c[0x10C463A4:0x00000004]”,第 182 行) 1> 要解决此问题,请尝试简化或更改上面所列位置附近的程序。 1>请选择 Visual C++ 1>…...
2024/4/20 12:24:01 - C# 单元测试(入门)
注:本文示例环境VS2017XUnit 2.2.0 单元测试框架xunit.runner.visualstudio 2.2.0 测试运行工具Moq 4.7.10 模拟框架什么是单元测试? 确保软件应用程序按作者的期望执行操作,其中最好的一种方法是拥有自动化测试套件。 可以对软件应用程序进行各种不同的测试,包括集成测试、…...
2024/4/12 9:34:12 - 进度条的实现(线程)
1、理论:他是个循环的过程,一个进度数的累加,当到达一定值后,触发某个事件; 2、实现的过程: (1)、定义一个线程:操作的执行体;//定义一个线程Runnable progressBar = new Runnable() {int i = 0;@Overridepublic void run() {i = i + 5;Message msg = handler.obta…...
2024/4/12 9:33:54 - 十六进制转十进制数算法
十六进制转十进制数算法 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F 十六进制中,ABCDEF分别表示10 11 12 13 14 15 (个位 * 16^0) +(十位 * 16^1) + (百位 * 16^2) …… 即:16的0,1,2……次方 例如: (5BB)16 (11*16^0) +(11*16^1)+(5*16^2) = 11 + 176 + 1280 =1467--------…...
2024/4/18 12:33:06 - 读马老师的《Java自学之路》有感
今天读了一份文档,是马士老师写的《马士兵Java自学之路》,感觉自己很受启发。其中很多的观点和意见不仅对想就业于IT的人士有指导作用,而且也对我们当代的大学生很有启发。我想如果是一名计算机专业的学生,毕业的时候才看到这篇文章的话,他应该会很后悔的,希望自己的大学…...
2024/4/12 9:33:54 - MinGW-w64 C/C++编译器下载和安装
目录1.安装包下载方法一:下载Installer在线安装(费时)方法二:下载离线包(较快)2.环境变量配置3.小试牛刀如果电脑没有安装MinGW-w64 C/C++编译器,在Windows的命令窗口键入gcc会提示 “"gcc"不是内部或外部命令,也不是可运行的程序或批处理文件”。1.安装包下…...
2024/4/22 4:33:16 - SSM三大框架整合教程
前言SSM就是Spring+SpringMvc+Mybatis,本文搭建一个基本的ssm框架本文所有源代码包含jar包下载点击:https://download.csdn.net/download/wcc27857285/10667045正文Eclipse新建web dynamic project一.项目结构图:二.mysql数据库创建好user表:(数据库名为firstdb)三.引入J…...
2024/4/22 17:21:22 - CPP 中的8进制 10进制 16进制
1、C和C++都没有提供二进制数的表达方法。 2、C,C++语言中,如何表达一个八进制数呢?如果这个数是 876,我们可以断定它不是八进制数,因为八进制数中不可能出7以上的阿拉伯数字。但如果这个数是123、是567,或12345670,那么它是八进制数还是10进制数,都有可能。所以,C,C++规…...
2024/4/12 9:34:55 - C语言 10进制转16进制
#include "stdio.h" int main() { int num=0;int a[100]; int i=0; int m=0;int yushu; char hex[16]={0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F};printf("请输入一个十进制整数:"); scanf("%d",&num); while(num>0) { yushu=num%16; a[i++]=yu…...
2024/4/9 18:15:41 - 编译器的自举原理是什么?
转自知乎:https://www.zhihu.com/question/28513473?sort=created 你想创造一门V语言而且用V语言来写V编译器的话,你得按照下面的方法做: 1、用C++把那个编译器(A)写出来,顺便留下很多测试用例。 2、用V语言把那个编译器写(B)出来,用A.exe来编译B,修改…...
2024/4/15 8:05:38 - Android文件下载进度条的实现
main.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical"android:layout_width="fill_parent"android:l…...
2024/4/12 9:34:43 - BZOJ 3489 A simple rmq problem
3489: A simple rmq problem Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 326 Solved: 85 [Submit][Status] Description因为是OJ上的题,就简单点好了。给出一个长度为n的序列,给出M个询问:在[l,r]之间找到一个在这个区间里只出现过一次的数,并且要求找的这个数尽可…...
2024/4/20 15:45:31 - rgb颜色转换(16进制->10进制)
rgbValue=#123456; // rgb颜色转换(16进制->10进制) #define UIColorFromRGB(rgbValue) [UIColor colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 green:((float)((rgbValue & 0xFF00) >> 8))/255.0 blue:((float)(rgbValue & 0xFF)…...
2024/4/9 18:15:36 - 软件测试_单元测试和集成测试
title: 软件测试_单元测试和集成测试 date: 2019-11-25 15:58:23 categories:软件测试 tags:单元测试和集成测试 什么是单元测试单元测试就是对已实现的软件最小单元进行测试,以保证构成软件的各个单元的质量。单元测试的目的单元实现其特定功能 单元的运行能够覆盖预先设定的…...
2024/4/13 0:07:12 - java soap技术
在博客园看到的这篇文章,觉得写的非常好,分享一下,也供自己学习。 原文链接 [url]http://www.cnblogs.com/mingzi/archive/2009/03/23/1419385.html[/url]开始之前,我想就本文即将讨论的主题和读者需要具备的起点知识做一些必需的描叙。本文的主题是讨论SOAP技术,我们将尽…...
2024/4/9 18:15:34 - JavaScript单元测试入门
首先要弄清楚什么是单元。单元就是一个相对独立的功能模块,可以是一个类,或是一个模块,或是一个方法。单元测试的目的,就是首先保证一个系统的基本组成单元(类、模块或方法)能正常工作。打个比方,你想一台机器能正常工作,首先要保证它的每一个零件和组件能正常工作。而…...
2024/4/12 9:35:12 - NodeJS进制转换
/**十六进制转字符串**/let data01 = 48656c6c6f20576f726c64//十六进制let newdata = new Buffer(data01,hex);//先把数据存在buf里面console.log(newdata.toString("utf-8"));//使用toString函数就能转换成字符串控制台输出结果:Hello World/**字符串转十六进制**…...
2024/4/12 9:35:12
最新文章
- 【Canvas与艺术】绘制金色八卦图
【关键点】 等比例缩放各部件及将八卦转为“二进制”的过程。 【成图】 【代码】 <!DOCTYPE html> <html lang"utf-8"> <meta http-equiv"Content-Type" content"text/html; charsetutf-8"/> <head><title>使用…...
2024/4/23 20:37:52 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - 关于hive启动的相关问题记录
问题:初始化hive元数据报错 [atguiguhadoop102 software]$ schematool -initSchema -dbType mysql -verboseError: Table CTLGS already exists (state42S01,code1050) Closing: 0: jdbc:mysql://hadoop102:3306/metastore?useSSLfalse org.apache.hadoop.hive.me…...
2024/4/21 20:36:50 - 在 Visual Studio Code (VSCode) 中隐藏以 . 开头的文件
打开VSCode。 按下Ctrl ,快捷键打开设置。您也可以点击屏幕左下角的齿轮图标,然后选择“Settings”。 在设置搜索框中,键入files.exclude。 在找到的Files: Exclude项中,点击Add Pattern按钮来添加一个新的模式,或者直接在搜索…...
2024/4/22 21:08:05 - 2024免费Mac苹果解压压缩包软件BetterZip5
在2024年,对于Mac电脑用户来说,如果你想要无需解压就能快速查看压缩文档的内容,BetterZip是一个极佳的选择。这款软件不仅支持多种格式的压缩和解压,如zip、rar、7z、tar等,还具备丰富的功能和设置,包括预览…...
2024/4/22 6:37:18 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/4/22 17:02:52 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/4/23 13:30:22 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/23 13:28:06 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/4/20 23:26:47 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/23 13:27:44 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/19 11:57:53 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/23 13:29:53 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/23 13:27:22 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/23 13:28:42 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/4/21 20:01:37 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/23 13:29:23 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/23 13:27:46 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/23 13:47:22 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/19 11:59:23 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/4/19 11:59:44 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/4/23 13:28:08 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/23 13:29:47 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/23 13:28:14 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/4/23 13:27:51 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/23 13:27:19 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57