Python测试驱动开发(TDD)

前言:TDD是一种敏捷开发模式,而不是测试方法
测试很难 ——- 难在坚持,一直做下去。
现在花时间编写的测试不会立即显出功效,要等到很久以后才有作用 ——- 或许几个月之后避免在重构过程中引入问题,或者升级依赖时捕获回归异常。或许测试会从一种很难衡量的方式回报你,促使你写出设计更好的代码,但你却误以为没有测试也能写出如此优雅的代码。

项目github地址

https://github.com/Tyrone-Zhao/Test-Driven-Development

目录

  • Python测试驱动开发(TDD)
      • 项目github地址
    • 目录
      • 单元测试的好处
        • 编程就像从井里打水
        • 细化测试每个函数的好处
      • 单元测试与功能测试的区别
        • 单元测试与集成测试的区别以及数据库
      • “单元测试/编写代码“循环
      • 遵守不测试常量规则
      • 有用的TDD概念
      • 不要预先做大量的设计
      • 确保出现回归测试
      • 如何测试设计和布局
      • TDD以及部署的危险区域
      • 别忘了重构
      • 尽早合并代码
      • 要判断何时应该编写测试确认我们没有犯错
      • 单元测试需要一个断言框架和报告程序,或许还要选择一个技术模拟库
      • JavaScript测试在TDD循环中的位置
        • 一些缺憾
      • 探索性编程、探究及去掉探究代码
      • 在Python中使用模拟技术
      • 把ORM代码放到辅助方法中
      • 以复杂度为准则
      • 不同测试类型以及解耦ORM代码的利弊
      • CI和Selenium最佳实践
        • 设置虚拟显示器,在无界面的环境中运行功能测试
      • 在不同的测试类型之间正确权衡
      • 使用Sinon.js测试客户端Ajax
      • TDD速查表
        • 项目开始阶段
        • TDD基本流程
        • 测试不止要在开发环境中运行
        • 通用的测试最佳实践
        • Selenium功能测试最佳实践
        • 由外而内,测试隔离与整合测试,模拟技术

单元测试的好处

编程就像从井里打水

编程其实很难,我们的成功往往得益于自己的聪明才智。假如我们不那么聪明,TDD就能助我们一臂之力。Kent Beck(TDD理念基本就是他发明的)打了个比方。试想你用绳子从井里提一桶水,如果井不太深,而且桶不是很满,提起来很容易。就算提满满一桶水,刚开始也很容易。但要不了多久你就累了。TDD理念好比是一个棘轮,你可以使用它保存当前的进度,休息一会儿,而且能保证进度绝不倒退。这样你就没必要一直那么聪明了。Test All The Things!

细化测试每个函数的好处

程序变复杂后问题就来了,到时你就知道测试的重要性了。你要面临的危险是,复杂性逐渐靠近,而你可能没发觉,但不久之后你就会变成温水煮青蛙。
首先,写测试很简单,写起来不会花很长时间,所以,别抱怨,只管写就是了。
其次,占位测试很重要。先为简单的函数写好测试,当函数变复杂后,这道心理障碍就容易迈过去。你可能会在函数中添加一个if语句,几周后再添加一个for循环,不知不觉间就将其变成一个基于元类(meta-class)的多态树结构解析器了。因为从一开始你就编写了测试,每次修改都会自然而然地添加新测试,最终得到的是一个测试良好的函数。相反,如果你试图判断函数什么时候才复杂到需要编写测试的话,那就太主观了,而且情况会变得更糟,因为没有占位测试,此时开始编写测试需要投入很多精力,每次改动代码都冒着风险,你开始拖延,很快青蛙就煮熟了。

单元测试与功能测试的区别

单元测试和功能测试之间的界线有时不那么清晰。不过二者之间有个基本区别:功能测试站在用户角度从外部测试应用,单元测试则站在程序员的角度从内部测试应用。
采用的工作流程大致如下:
1)先写功能测试,从用户的角度描述应用的新功能
2)功能测试失败后,想办法编写代码让它通过(或者说至少让当前失败的测试通过)。此时,使用一个或多个单元测试定义希望代码实现的效果,保证为应用中的每一行代码(至少)编写一个单元测试
3)单元测试失败后,编写最少量的应用代码,刚好让单元测试通过。有时,要在第2步和第3步之间多次往复,直到我们觉得功能测试有一点进展为止。
4)然后,再次运行功能测试,看能否通过,或者有没有进展。这一步可能促使我们编写一些新的单元测试和代码等。

由此可以看出,在整个过程中,功能测试站在高层驱动开发,而单元测试从低层驱动我们做些什么。


功能测试代码, 测试主要功能(冒烟测试),数据有效性验证。详细代码可参见上面的github地址中的functional_test/

TDD的重要思想是必要时一次只做一件事。即每次只做必要的操作,让功能测试向前迈出一小步即可。


单元测试代码,视图逻辑测试,数据模型测试,模版表单测试。
Mock,参数校验:

from unittest.mock import patch, call
[...]@patch("accounts.views.auth")def test_calls_authenticate_with_uid_from_get_request(self, mock_auth):self.client.get("/accounts/login?token=abcd123")self.assertEqual(mock_auth.authenticate.call_args,call(uid="abcd123"))
  • 这里的patch mock了accounts.views.auth模块,而且把mock的范围限定在下面的测试函数范围内,测试函数执行完毕,mock即被取消
  • mock掉的auth模块中的所有属性和方法也同样是mock对象,通过在参数重传递mock对象为mock_auth来实现mock对象的调用
  • self.client.get()方法为django内置的模拟客户端,可以模拟客户端发送请求,示例中请求了”/accounts/login?token=abcd123”的url
  • 对应请求url的回调函数为auth模块中的authenticate方法,用mock对象的call_args属性获取其请求的参数,返回一个call(*args, **args)对象
  • 下面用mock模块中导入的call方法构建预期结果,使用TestCase类的assertEqual()方法断言结果,至此一个单元测试函数完毕

单元测试与集成测试的区别以及数据库

追求纯粹的人会告诉你,真正的单元测试绝不能设计数据库操作。不仅测试代码,而且还依赖于外部系统,如数据库的测试叫做集成测试更确切。


“单元测试/编写代码“循环

TDD中的单元测试/编写代码循环
1)在终端里运行单元测试,看它们是如何失败的。
2)在编辑器中改动最少量的代码,让当前失败的测试通过
然后不断重复。
想保证编写的代码无误,每次改动的幅度就要尽量小。这么做才能确保每一部分代码都有对应的测试监护。
乍一看工作量很大,初期也的确如此。但熟练之后你便会发现,即使步伐迈得很小,编程的速度也很快。

良好的单元测试实践方法要求,一个测试只能测试一个功能,多个功能需要写成多个测试。因为如果一个测试中有多个断言,一旦前面的断言导致测试失败,就无法得知后面的断言情况如何。

遵守不测试常量规则

单元测试要测试的其实是逻辑、流程控制和配置。编写断言检测HTML字符串中是否有指定的字符序列,不是单元测试应该做的。

重构的首要原则是不能没有测试,严格的TDD流程中,可以遵循以下顺序:
功能测试 -> 单元测试 -> 单元测试/编写代码循环 -> 重构代码

有用的TDD概念

  • 回归
    新添加的代码破坏了应用原本可以正常使用的功能。
  • 意外失败
    测试在意料之外失败了。这意味着测试中有错误,或者测试帮我们发现了一个回归,因此要在代码中修正。
  • 遇红/变绿/重构
    描述TDD流程的另一种方式。先编写一个测试看着它失败(遇红),然后编写代码让测试通过(变绿),最后重构,改进实现方式。
  • 三角法
    添加一个测试,专门为某些现有的代码编写用例,以此推断出普适的实现方式(在此之前的实现方式可能作弊了)。
  • 事不过三,三则重构
    判断何时删除重复代码使用的经验法则。如果两段代码很相似,往往还要等到第三段相似代码出现,才能确定重构时哪一部分是真正共通、可重用的。
  • 记在便签上的待办事项清单
    在便签上记录编写代码过程中遇到的问题,等手头的工作完成后再回过头来解决。

三种功能测试调试技术:行间print语句、time.sleep以及改进的错误消息:
如assert[Equal|In|True|其他](something, “错误消息”)

不要预先做大量的设计

TDD和软件开发中的敏捷运动联系紧密。敏捷运动反对传统软件工程实践中预先做大量设计的做法。敏捷理念认为,在实践中解决问题比理论分析能学到更多,要尽早把最简可用应用放出来,根据实际使用中得到的反馈逐步向前推进设计。当然,稍微思考一下设计往往能帮我们更快地找到答案。

使用递增的步进式方法修改现有代码,而且保证代码在修改前后都能正常运行。

YAGNI
关于设计的思考一旦开始就很难停下来,我们会冒出各种想法:或许想给每个清单起个名字或加个标题,或许想使用用户名和密码识别用户,或许想给产品页面添加一个较长的备注和简短的描述,或许想存储某种顺序,等等。但是,要遵守敏捷理念的另一个信条:”YAGNI”(读作yag-knee)。它是”You ain’t gonna need it”(你不需要这个)的简称。
有时我们冒出一个想法,觉得可能需要,可问题是,不管想法有多好,大多数情况下最终你都用不到这个功能。

REST(式)
“表现层状态转化”(representational state transfer, REST)是Web设计的一种方式。设计面向用户的网站时,不必严格遵守REST规则,可是从中能得到一些启发。想看看REST API是什么样子,可以查看我的另一篇博文。

确保出现回归测试

独立用户场景下的功能测试通过后,要注意多用户场景下的功能测试回归。
重构代码,或者开发新功能时修改了旧有代码,要注意单元测试和功能测试的回归。

如何测试设计和布局

简单来说,不应该为设计和布局编写测试。因为这太像是测试常量,所以写出的测试不太牢靠
这说明设计和布局的实现过程极具技巧性、涉及CSS和静态文件。因此,可以编写一些简单的“冒烟测试“,确认静态文件和CSS起作用即可。把代码部署到生产环境时,冒烟测试能协助我们发现问题。
但是如果某部分样式需要很多客户端JavaScript代码才能使用(如动态缩放),就必须为此编写一些测试。
要试着编写最简的测试,确信设计和布局起作用即可,不必测试具体的实现。我们的目标是能自由修改设计和布局,且无须时不时地调整测试。

功能测试代码, 布局和样式测试:

from selenium.webdriver.common.keys import Keys
from .base import FunctionalTestclass LayoutAndStylingTest(FunctionalTest):def test_layout_and_styling(self):# 小明访问首页self.browser.get(self.live_server_url)self.browser.set_window_size(1024, 768)# 他看到输入框完美地居中显示inputbox = self.get_item_input_box()self.assertAlmostEqual(inputbox.location["x"] + inputbox.size["width"] / 2,512,delta=10)# 他新建了一个清单,看到输入框仍完美地居中显示inputbox.send_keys("测试")inputbox.send_keys(Keys.ENTER)self.wait_for_row_in_list_table("1: 测试")inputbox = self.get_item_input_box()self.assertAlmostEqual(inputbox.location["x"] + inputbox.size["width"] / 2,512,delta=10)

TDD以及部署的危险区域

部署的过程中一些危险区域如下:
1)静态文件(CSS、JavaScript、图片等)
Web服务器往往需要特殊的配置才能伺服静态文件
2)数据库
可能会遇到权限和路径问题,还要小心处理,在多次部署之间不能丢失数据
3)依赖
要保证服务器上安装了网站依赖的包,而且版本要正确

不过这些问题有相应的解决方案:
1)使用与生产环境一样的基础架构部署过渡网站(staging site),这么做可以测试部署的过程,确保部署真正的网站时操作正确。
2)可以在过渡网站中运行功能测试,确保服务器中安装了正确的代码和依赖包。而且为了测试网站的布局,我们编写了冒烟测试,这样就能知道是否正确加载了CSS。
3)与在本地设备上一样,当服务器上运行多个Python应用时,可以使用虚拟环境管理包和依赖。
4)最后,一切操作都自动化完成。使用自动化脚本部署新版本,使用同一个脚本把网站部署到过渡环境和生产环境,这么做能尽量保证过渡网站和线上网站一样。

调试技巧
查看Nginx的错误日志,存储在/var/log/nginx/error.log中。
检查Nginx的配置:nginx -t
确保浏览器没有缓存过期的响应。按下Ctrl键的同时点击刷新按钮。

别忘了重构

TDD不是万能灵药。它要求你在测试通过后花点实践重构,改进设计。否则“技术债务“将高高筑起。
不过,重构的最佳方法往往不那么容易想到,可能等到写下代码之后的几天、几周甚至几个月,处理完全无关的事情时,突然灵光一闪才能想出来。

在解决其他问题的途中,应该停下来去重构以前的代码吗?
要视情况而定。不能冒险在无法正常运行的应用中重构,可以在便签上做个记录,等测试组件能全部通过之后再重构。

关于重构的小贴士
1)把测试放在单独的文件夹中
功能测试可以按照特定功能或用户故事的方式组织。
单元测试分拆成文件,放在一个Python包中。
2)编写测试的主要目的是让你重构代码!一定要重构,尽量让代码(包括测试)变得简洁。
3)测试失败时别重构
如果测试的对象还没实现,可以先为测试方法加上@skip装饰器。
记下想重构的地方,完成手头上的活儿,等应用处于正常状态时再重构。
提交代码之前别忘了删掉所有@skip装饰器!

尽早合并代码

精益理论中的“尽早部署“有个推论,即“尽早合并代码“。编写表单可能要花很多时间,不断添加各种功能—做了各种工作,得到一个功能完善的表单类,但发布应用后才发现大多数功能实际并不需要。
因此,要尽早试用新编写的代码。

要判断何时应该编写测试确认我们没有犯错

测试时要判断何时应该编写测试确认我们没有犯错。一般而言,做决定时要谨慎。
不可能编写测试检查所有可能出错的方式。如果有一个函数计算两数之和,可以编写一些测试:

    assert adder(1, 1) == 2assert adder(2, 1) == 3

但不应该认为实现这个函数时故意编写了有违常理的代码:

    def adder(a, b):# 不可能这么写if a == 3:return 666else:return a + b

判断时你要相信自己不会故意犯错,只会不小心犯错。

单元测试需要一个断言框架和报告程序,或许还要选择一个技术模拟库

在JavaScript领域,测试工具的选择有许多种,如jsUnit、Qunit、Mocha、Chutzpah、Karma、Testacular、Jasmine等。选择其中一个工具后,还得选择一个断言框架报告程序,或许还要选择一个驭件(spy侦件、fake伪件、stub桩件)技术库。

示例项目中使用的是QUnit,简单,根Python单元测试很像,而且能很好地和jQuery配合使用。
代码可以参考上面的github地址中list/static/tests/test.html
Qunit

JavaScript测试在TDD循环中的位置

JavaScript测试在双重TDD循环中处于什么位置?答案是,JavaScript测试和Python单元测试扮演的角色完全相同。
1)编写一个功能测试,看着它失败
2)判断接下来需要哪种代码,Python还是JavaScript?
3)使用选中的语言编写单元测试,看着它失败。
4)使用选中的语言编写一些代码,让测试通过。
5)重复上述步骤

一些缺憾

1)编写JavaScript时,应该尽量利用编辑器提供的协助,避免常见的问题。试一下句法/错误检查工具,如jsLinter、jshint。
2)使用Phantomjs可以让JavaScript测试在命令行中运行。
Phantomjs
3)前端开发圈目前流行angular.js和React这样的MVC框架。这些框架的教程大都使用一个RSpec式断言库,名为Jasmine。如果你想使用MVC框架,使用Jasmine比Qunit更方便。

探索性编程、探究及去掉探究代码

学习新工具,或者研究新的可行性方案时,一般都可以适当地把严格的TDD流程放在一边,不编写测试或编写少量的测试,先把基本的原型开发出来。
这种创建原型的过程一般叫作“探究“(spike)。

最好在一个新分支中去探究,去掉探究代码时再回到主分支。

把探究所得应用到真实的代码基中。要完全摒弃探究代码,然后从头开始,用TDD流程再实现一次。去掉探究代码后实际编写的代码往往与最初有很大不同,而且通常更好。
该不该这么做请视情况而定!

在Python中使用模拟技术

模拟技术,是在单元测试中测试外部依赖的通用方式。只要与第三方API交互都适合使用驭件测试。
代码有外部副作用时也是如此,例如调用API、发推文、发短信等等。我们并不想真的通过互联网发推文或者调用API。但又必须找到一种方法,测试代码是否正确。驭件(mock)正是我们寻找的答案。

from unittest.mock import patch@patch("accounts.views.auth")
class LoginViewTest(TestCase):''' 登录视图测试 '''[...]@patch("accounts.views.send_mail")def test_sends_link_to_login_using_token_uid(self, mock_send_mail,mock_auth):''' 测试含有token的登录链接被发送到指定邮件地址 '''self.client.post("/accounts/send_login_email", data={"email": "200612453@qq.com"})token = Token.objects.first()expected_url = f"http://testserver/accounts/login?token={token.uid}"(subject, body, from_email, to_list), kwargs = mock_send_mail.call_argsself.assertIn(expected_url, body)

使用驭件可能导致“与实现紧密耦合“。我们知道,通常最好测试行为,而不测试实现细节;测试发生了什么,而不测试是如何发生的。驭件往往在如何做这条路上走的太远,而很少关注“是什么“。
如果能有效减少测试之间的重复,就有充分的理由使用驭件。这是避免组合爆炸的一种方式。

把ORM代码放到辅助方法中

有些人喜欢尽量减少应用中使用的ORM代码量,尤其不喜欢在视图层和表单层使用ORM代码。
一个原因是,测试这几层时更容易;另一个原因是,必须定义辅助方法,这样能更清晰地表述域逻辑。请对比这段代码:

list_ = List()
list_.save()
item = Item()
item.list = list_
item.text = self.cleaned_data["text"]
item.save()

和这段代码:

List.create_new(first_item_text=self.cleaned_data["text"])

辅助方法同样可用于读写查询。假设有这样一行代码:

Book.objects.filter(in_print=True, pub_date__lte=datetime.today())

和如下的辅助方法相比,孰好孰坏一目了然:

Book.all_available_books()

定义辅助方法时,可以起个适当的名字,表明它们在业务逻辑中的作用。使用辅助方法不仅可以让代码的条理变得更清晰,还能把所有ORM调用都放在模型层,因此整个应用不同部分之间的耦合更松散

以复杂度为准则

处理复杂问题时才能体现隔离测试(真正的单元测试)的优势。
一旦应用变得复杂,比如视图和模型之间分了更多层,需要编写辅助方法或自己的类,那多编写一些隔离测试就能从中受益了。

不同测试类型以及解耦ORM代码的利弊

1)功能测试
从用户的角度出发,最大程度上保证应用可以正常运行。
但反馈循环用时长。
无法帮助我们写出简介的代码。
2)整合测试(依赖于ORM或框架(如Django、Flask)测试客户端等)
编写速度快。
易于理解。
发现任何集成问题都会提醒你。
但是,并不总能得到好的设计(这取决于你自己)。
一般运行速度比隔离测试慢。
3)隔离测试(使用驭件)
涉及的工作量最大。
可能难以阅读和理解。
但是,这种测试最能引导你实现更好的设计。
运行速度最快。
4)解耦应用代码和ORM代码
力求隔离测试的后果之一是,我们不得不从视图和表单等处删除ORM代码,把它们放到辅助函数或者辅助方法中。如果从解耦应用代码和ORM代码的角度看,这么做有好处,还能提高代码的可读性。
当然,要结合实际情况判断是否值得付出额外精力去做。

CI和Selenium最佳实践

把Jenkins安装在过渡服务器或生产服务器上可不是个好主意,因为有很多操作要交给Jenkins完成,比如重新引导过渡服务器。
为了提升Jenkins的安全性,还要设置HTTPS。可以让Nginx使用自签名的证书,把发给443端口的请求转发给8080端口。这样设置之后,甚至可以让防火墙阻断8080端口。

设置虚拟显示器,在无界面的环境中运行功能测试

1)无界面浏览器(headless browser),如PhantomJS或SlimerJS。
2)设置虚拟显示器,使用”Xvfb”,MAC需要自己下载XQuartz,Jenkins插件中配置/opt/X11/bin/
3)Jenkins中启用虚拟显示器勾选”Start Xvfb before the build, and shut it down after.”
4)自己在功能测试脚本中添加失败截图方法,方便调试(因为没有没显示器)。
5)用Fabric或Ansible等工具将通过单元测试的构建自动部署到过渡服务器并进行功能测试。
6)部署到生产服务器
Jenkins

在不同的测试类型之间正确权衡

1)隔离测试(纯粹的单元测试)与整合测试
单元测试的主要作用应该是验证应用的逻辑是否正确。隔离测试只能测试一部分代码,测试是否通过与其他任何外部代码都没有关系。纯粹的单元测试是指,对于一个函数的测试而言,只有这个函数能让测试失败。如果这个函数依赖于其他系统且破坏这个系统会导致测试失败,就说明这是整合测试。这个系统可以是外部系统,例如数据库,也可以是我们无法控制的另一个函数。不管怎样,只要破坏系统会导致测试失败,这个测试就没有完全隔离,因此也就不是纯粹的单元测试。整合测试并非不好,只不过可能意味着同时测试多个功能。
2)集成测试
集成测试用于检查被你控制的代码是否能和你无法控制的外部系统完好集成。集成测试往往也是整合测试。
3)系统测试
如果说集成测试检查的是与外部系统的集成情况,那么系统测试就是检查应用内部多个系统之间的集成情况。例如,检查数据库、静态文件和服务器配置在一起是否能正常运行。
4)功能测试和验收测试
验收测试的作用是从用户的角度检查系统是否能正常运行。(用户能接受这种行为吗?)验收测试很难不写成全栈端到端测试。前文中,使用端到端测功能测试代替验收测试和系统测试。

要熟练的编写单元测试,需要进入”神赐的心流状态(形容极度专注)”。XD。
如果应用的核心使用函数式编程范式编写(完全没有副作用),因此可以使用完全隔离、纯粹的单元测试,根本无需使用驭件
1> 务实为本
跟着感觉走,先编写下意识觉得应该编写的测试,然后再根据需要修改。在实践中学习。
2> 关注想从测试中得到什么
目标是正确性、好的设计和快速的反馈循环
3> 架构很重要
架构在某种程度上决定了所需的测试类型。业务逻辑与外部依赖隔离得越好,代码的模块化成都越高,在单元测试、集成测试和端到端测试之间便能达到越好的平衡。

使用Sinon.js测试客户端Ajax

没有模拟库是无法测试Ajax的。不同的测试框架和工具采用不同的模拟库,而Sinon是通用的。Sinon还提供了JavaScript驭件。

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><meta name="viewport" content="width=device-width"><title>Javascript tests</title><link rel="stylesheet" type="text/css" href="qunit-2.6.1.css">
</head>
<body><div id="qunit"></div><div id="qunit-fixture"><form id="id_item_form"><input name="text" /><input type="hidden" name="csrfmiddlewaretoken" value="tokey" /><div class="has-error"><span class="help-block">Error Text</span></div></form><table id="id_list_table"></table></div><script src="../node_modules/jquery/dist/jquery.min.js"></script><script src="../node_modules/sinon/pkg/sinon.js"></script><script src="qunit-2.6.1.js"></script><script src="list.js"></script><script type="text/javascript">/* global sinon */var server, sandbox;QUnit.testStart(function(){server = sinon.fakeServer.create();sandbox = sinon.createSandbox();});QUnit.testDone(function(){server.restore();sandbox.restore();});QUnit.test("should call updateItems on initialize", function (assert) {var url = "/getitems/";sandbox.spy(window.Superlists, "updateItems");window.Superlists.initialize(url);assert.equal(window.Superlists.updateItems.lastCall.args,url)});[...]

可以通过server.respond()准确控制异步代码的流程:

 QUnit.test("updateItems should fill in lists table from ajax response", function (assert) {var url = "/getitems/";var responseData = [{"id": 101, "text": "待办事项1"},{"id": 102, "text": "待办事项2"},];server.respondWith("GET", url, [200, {"Content-Type": "application/json"}, JSON.stringify(responseData)]);window.Superlists.updateItems(url);server.respond();var rows = $("#id_list_table tr");assert.equal(rows.length, 2);var row1 = $("#id_list_table tr:first-child td");assert.equal(row1.text(), "1: 待办事项1")var row2 = $("#id_list_table tr:last-child td");assert.equal(row2.text(), "2: 待办事项2");});

1)需要注意,初始化之后才能设置服务器相应,因为我们想设置的是提交表单时发送的POST请求的响应,而不是一开始那个GET请求的响应。JavaScript测试最难掌握的技术之一便是控制执行顺序。
2)仅当开始那个GET请求处理完毕之后,才开始模拟辅助函数。sandbox.spy调用的作用与Python测试中的patch一样,把指定对象替换为驭件。
3)模拟的updateItems函数现在多了一些属性,例如lastCall和lastCall.args(类似于Python驭件的call_args)。

TDD速查表

——————未完待续———————-

项目开始阶段

TDD基本流程

测试不止要在开发环境中运行

通用的测试最佳实践

Selenium功能测试最佳实践

由外而内,测试隔离与整合测试,模拟技术

参考资料: 《Python测试驱动开发》第2版、《Python测试之道》

查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 排名前三的Python IDE你选择哪个?我选PyCharm

    福利发送:Python开发微信机器人源码下载世界上最好的 Python 编辑器或 IDE 是什么?炫酷的界面、流畅的体验,我们投 PyCharm 一票,那么你呢?编辑Python程序,您有许多选项。有些人仍然喜欢一个基本的文本编辑器,如Emacs,VIM或Gedit,所有这些都可以通过语法高亮和自动填充…...

    2024/5/4 4:32:23
  2. 进阶之路(基础篇) - 012 Arduino IDE 添加DHT11传感器第三方库的方法

    由于Arduino本身没有DHT 11温湿度传感器的的头文件,单有第三方的库可以给我门使用。方法如下: Step 1:下载地址:https://pan.baidu.com/s/1qYfdBJ2#list/path=%2F 如果你已经下载了最新版的Arduino IDE就可以使用其自带的库管理器和版型管理器啦! 当然也可以去官网下载安装…...

    2024/4/18 6:02:55
  3. gradle导入新的依赖后各种问题

    有时候导入一个新库compilecom.libertybrowser:affiliatetrigger:2.0.1后会gradle构建的时候发生这种错误:Process command /home/meizu/android/sdk/build-tools/25.0.1/aapt finished with non-zero exit value 1网上说是库依赖有冲突,但实际看具体的出错地方是因为manifes…...

    2024/4/16 15:58:10
  4. 成为顶级黑客(2003年)必备软件!

    成为顶级黑客(2003年)必备软件! CGI后门: cgi网页后门 cgi网页后门,envymask编写...《 网页合并器 本程序可以自动生成网页,可以把网页和EXE合成新的网页,在打开网页的同时自动运行EXE文件.你将木马合并在一个网页中,别人浏览之后,呵呵,我什么都没说~~~ 海阳顶端网木马…...

    2024/4/16 10:20:59
  5. 敏捷开发项目管理流程

    前段时间给大家整理了敏捷开发的流程,最近在整理敏捷开发项目的流程和管理制度,其整理的项目管理规程如下,这份规程也不完全算是敏捷专属的项目管理规程,主要是在结合我们公司实际的情况下编写出来的,大家在实际嵌入到公司的过程中可以参考下,不能照搬。1. 目的规范互联…...

    2024/4/14 22:06:02
  6. C语言入门精髓

    说到了C语言还是很基础的编程语言,还是值得去学,那么怎么去学?什么人才能学好?为什么学到一半就早早缴械投降了?众多迷雾,众多的困难,怎么破局?http://www.shfdjk.com很多对编程感兴趣的小伙伴,找个所谓的高手,问了几个编程入门需要的书,也是拼了,呼呼的买了一堆C语…...

    2024/4/17 1:42:01
  7. [概念]神经网络的种类(前馈神经网络,反馈神经网络,图网络)

    随着神经网络的不断发展,越来越多的人工神经网络模型也被创造出来了,其中,具有代表性的就是前馈型神经网络模型、反馈型神经网络模型以及图网络.1.前馈型神经网络模型前馈神经网络(Feedforward Neural Network ,FNN),简称前馈网络。把每个神经元按接收信息的先后分为不同…...

    2024/4/18 8:54:02
  8. C/C++开发者必不可少的15款编译器+IDE

    Web开发者可选择的编程语言有很多比如,Java、.Net、PHP、Ruby、Perl、Python等等,但是今天我们要讨论的是两个古老且非常流行的语言,即C/C++。正是由于其迷人的特性,赋予了它们更加有效的功能,并且也获得了各大工具厂商的支持。如今,这两门语言依然活跃在编程领域里,其不…...

    2024/5/4 3:15:17
  9. 盘点史上最严重的的十大黑客袭击事件

    黑客一直是大家所熟知但是又不了解的神秘人物,历史上有不少黑客对企业、社会造成了严重的影响,下面就给大家盘点一下历史上最眼中的十大黑客袭击事件!渗透攻击和防御教程一 渗透攻击和防御教程二 渗透攻击和防御教程三事件一:美国400万政府雇员资料被窃美国政府机构计…...

    2024/4/24 14:59:24
  10. C语言从入门到精通所需的7本书

    1. C Primer Plus ![image.png](http://upload-images.jianshu.io/upload_images/1956008-f959cc5bbec7f36f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) C Primer Plus作为一本被人推崇备至的c入门经典,C primer plus绝非浪得虚名。应该算得上C教材里最好的入…...

    2024/4/14 22:30:10
  11. 网络分析(Network Analysis)入门篇(二) 网络的性质

    目录网络节点的性质 网络的性质 网络层次性评价 动态网络演化——随机图模型 动态网络演化——有偏好的交友模型针对每个节点,我们可以研究一个个体在网络中的不同表现和性质,而针对整个网络的研究,能让我们不局限于群体中的个体,而是对一个群体所表现出来的特征进行分析,…...

    2024/4/20 12:15:25
  12. 手写UDF之后打包遇到的问题

    视频里给的maven项目有好几个报错,不知道是什么问题就先删除了,pom.xml里还有一个没用的配置也报错,也删了。然后终于可以打包了。我就爱看它报build success,可以取target目录下拿jar包了。一 、maven 项目在eclipse中没有 run as -> maven clean , maven install 等选…...

    2024/4/17 21:04:31
  13. 软件测试工程师笔试试题

    01. 什么要在一个团队中开展软件测试工作? 02. 您是否了解以往所工作的企业的软件测试过程?如果了解,请试述在这个过程中都有哪些工作要做?分别由哪些不同的角色来完成这些工作? 03. 您是否了解以往所工作的企业的软件开发过程?如果了解,请试述一个完整的开发过程…...

    2024/5/4 7:17:16
  14. c语言四项特效“疗法”

    学习c语言有很多技巧,比如快速学习的口诀和方式,除了基本的学习书籍外,再记住下面总结的一些小秘籍,新手入门就不再是难题。 一、一字真言 各位看官,c语言学习,其实只需一个字,那就是“编”。 (一)遍。 学习C语言,乃至学习所有的语言,都讲究一个动手——不是动手打人…...

    2024/4/20 1:06:10
  15. 游戏测试-笔试/面试(一)

    你玩过的游戏,它吸引你的地方是什么?moba类:王者荣耀,英雄联盟。创新性,公平性和丰富的开黑感吸引我。STG类:和平精英,写实的场景地图,物资资源吸引我。休闲竞速类:QQ飞车,QQ飞车手游,音乐好听,休闲感十足。口袋宠物系列手游:收集养成类,冒险的风格吸引我。MOMOR…...

    2024/4/14 22:30:06
  16. DL之NRL&GCN:网络表示学习NRL与图神经网络GNN的简介、应用、经典案例之详细攻略

    DL之NRL&GCN:网络表示学习NRL与图神经网络GNN的简介、应用、经典案例之详细攻略目录网络表示学习NRL与图神经网络GNN的简介1、网络表示学习与图神经网络的重要进展...

    2024/4/29 0:07:42
  17. Flashcache基本使用及注意事项

    Flashcache安装配置安装flashcache wgethttps://github.com/facebook/flashcache/archive/master.zip 下载下来的文件可能不是以.zip结尾的文件,使用file查看属性后解压进入文件夹安装cd flashcache-master make make install配置 # flashcache_create --help flashcache_crea…...

    2024/5/4 2:15:13
  18. 黑客如何快速查找网站后台地址方法整理

    黑客如何快速查找网站后台地址方法整理来源:本站整理 作者:小残搏客 时间:2014-06-15 TAG: 我要投稿小结一些方法..写了有遗漏之处请路过的各位指出来..想必许多黑客在入侵网站的时候总是为了有用户密码找不到后台而烦恼吧?我也经常是.直入主题吧 一 字典查找法 大家…...

    2024/4/14 22:30:02
  19. hive UDF 测试样例开发

    环境相关: 开发主机:Win7 开发环境:IDEA hadoop版本:hadoop-2.6.0-cdh5.7.1 hive版本:hive-1.1.0-cdh5.7.11. 开发环境相关说明依据《Win7 IDEA 开发环境搭建部署》部署Win7系统的idea开发环境,hadoop和hive环境依据《hadoop2.6.0-cdh5.7.1伪分布式编译安装》《hive…...

    2024/4/14 22:30:01
  20. MyEclipse10在线安装Freemarker IDE插件问题的解决办法

    现在用的最新的Freemarker版本2.3.19. 离线安装的IDE似乎有问题,默认2.3.6的版本,不识别Freemarker的"!",会显示错误提示,虽然Freemarker能正常保存,运行,但是对于强迫症的我绝对是不能容忍的。 然后网上搜索了下,说是用最新的Freemarker包替换插件中的Freema…...

    2024/4/16 19:06:54

最新文章

  1. 「 网络安全常用术语解读 」SBOM主流格式SWID详解

    国际标准化组织&#xff08;ISO&#xff09;和国际电工委员会&#xff08;International Electrotechnical Commission&#xff0c;IEC&#xff09;发布了ISO/IEC 19770-2软件标识&#xff08;Software Identification&#xff0c;SWID&#xff09;标签标准&#xff0c;该标准定…...

    2024/5/4 8:35:52
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. HTML——4.表格、列表、区块

    一、表格 HTML 表格是用于展示结构化数据的重要元素&#xff0c;它允许将数据以行和列的形式组织和显示。 基本结构和常见元素&#xff1a; 1. <table> 元素 <table> 元素是 HTML 表格的根元素&#xff0c;它用于定义整个表格的开始和结束。 2. <thead>、…...

    2024/5/2 17:43:56
  4. JavaEE 初阶篇-生产者与消费者模型(线程通信)

    &#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 生产者与消费者模型概述 2.0 在生产者与消费者模型中涉及的关键概念 2.1 缓冲区 2.2 生产者 2.3 消费者 2.4 同步机制 2.5 线程间通信 3.0 实现生产者与消费者模…...

    2024/5/2 21:34:51
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/1 17:30:59
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/5/2 16:16:39
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/5/3 23:10:03
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/5/2 15:04:34
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/1 4:32:01
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/5/4 2:59:34
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/5/2 9:07:46
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; 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
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在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