当前位置: 首页 > news >正文

怎么在自己电脑上做网站怎样在国外网站上做宣传

怎么在自己电脑上做网站,怎样在国外网站上做宣传,跳转到手机网站代码,网站 推广方案1. 什么是单元测试 通常来说单元测试#xff0c;是一种自动化测试#xff0c;同时包含一下特性#xff1a; 验证很小的一段代码#xff08;业务意义 或者 代码逻辑 上不可再分割的单元#xff09;#xff0c;能够更准确的定位到问题代码的位置 能够快速运行#xff08;…1. 什么是单元测试 通常来说单元测试是一种自动化测试同时包含一下特性 ·验证很小的一段代码业务意义 或者 代码逻辑 上不可再分割的单元能够更准确的定位到问题代码的位置 · 能够快速运行单元测试的意义在于快速且周期性的验证原有代码的准确性提高项目开发效率 · 以隔离的方式 (isolated manner)运行对外部依赖通过插桩解耦避免单元测试的复杂度实现问题快速定位简化单元测试的运行环境多个单元测试可以以任何顺序甚至并行进行 2. 为什么要单元测试 因为单元测试有如下优点 · 能快速的回归提高自测的效率 · 集成测试或者端到端的手工测试效率低而且无法覆盖到更细节的逻辑分支 · 也存在功能设计超前于产品设计通过接口维度无法触达某些逻辑分支需要通过单元测试来覆盖 · 功能开发人员更了解代码的实现开发人员写出的测试用例往往能更全面的覆盖代码 · 有良好单测的代码往往更方便重构 · 单元测试是项目代码的一部分维护方便当然这也依赖良好的单元测试编写习惯合适的颗粒度 3. 如何识别有测试价值的代码 当我们考虑给代码添加 单元测试时需要首先考虑加入单测后能够带来的收益有多少以及其付出的成本有多少用最小的维护成本提供最高的价值的单元测试。 3.1 项目属性 软件本身发布更新成本比较大如嵌入式软件客户端程序或者 软件的缺陷 更可能带来较大的资损如工厂银行内部的软件这类软件都是需要优先考虑单元测试。 如果一个项目本身不是特别核心的项目影响面小迭代更新相对较容易那么对单元测试的要求或者说对质量的要求也就没有那么强烈。 3.2 代码属性 3.2.1 重要的代码 · 领域层 · 基础设施代码 3.2.2 不容易被集成测试覆盖的代码 · 边界条件 · 异常条件 · 低概率场景 3.2.3 容易出现问题的代码 · 复杂的业务逻辑分支 · 状态机 · 胶水代码负责组合多个功能多个功能的输入具有不确定性 3.3 个人不建议的单元测试的行为 通常来说不建议在单元测试的时候启动spring容器后会牵扯过多的外部依赖导致单元测试难以进行或者成本过高。 同样外部接口数据库依赖中间件依赖都不建议在单元测试中加载可以通过mock或者sub的方式来进行隔离。 4. 编写 Unit Test 通常按照单元测试的AAA模式来编写单元测试分为三部分Arrange, Act, Assert 1Arrange 准备测试数据和测试环境确保测试的可重复性和可预测性。这包括初始化对象、设置变量、模拟外部依赖等 2Act 执行实际的测试操作也就是调用需要测试的方法或函数并获取返回值或状态。这个阶段应该仅包含单个操作以确保测试的独立性和可维护性 3Assert 验证测试结果是否符合预期也就是检查实际的输出是否与预期的输出相同。如果结果不符合预期我们需要检查测试代码和被测试代码找出问题所在并进行修复 4结果验证 - 对函数返回结果进行验证 5状态验证 - 对过程中的属性值来进行验证 6行为验证 - 对过程中会执行的动作进行验证 spock测试框架代码示例 class OrderServiceImplTest extends Specification {OrderService orderService new OrderServiceImpl();InventoryService inventoryService Mock(InventoryService)OrderConverter orderConverter Mock(OrderConverter.class)PaymentChannelClient paymentChannelClient Mock(PaymentChannelClient)OrderMapper orderMapper Mock(OrderMapper)def setupSpec() {} // runs once - before the first feature methoddef setup() { // runs before every feature methodorderService.setInventoryService(inventoryService)orderService.setPaymentChannelClient(paymentChannelClient)orderService.setOrderMapper(orderMapper)orderService.setOrderConverter(orderConverter)}def cleanup() {} // runs after every feature methoddef cleanupSpec() {} // runs once - after the last feature methoddef create order correctly() {//准备测试需要的参数given:Long id 1CreateOrderCommand command new CreateOrderCommand(orderNo, itemNo, orderItemQuantity, user, totalPrice)//创建一个spy可以用来做行为验证MockOrderEntity spyOrder Spy(constructorArgs: [id, orderNo, itemNo, orderItemQuantity, null, user, totalPrice])//指定返回spyorderConverter.toEntity(_ as CreateOrderCommand) spyOrderLockInventoryCommand lockInventoryCommand new LockInventoryCommand(itemNo, orderItemQuantity)when://触发测试Long resultId orderService.createOrder(command)then://行为验证, 创建订单的同时执行锁定库存lockInventory会被执行一次同时会验证参数是否和我们提供lockInventoryCommand是否equals1 * inventoryService.lockInventory(lockInventoryCommand)//行为验证最终订单执行insert1 * spyOrder.insert()//结果验证验证返回的idresultId id//状态验证spyOrder.orderStatus OrderStatus.CREATE//以表格的形式提供测试数据集合where:orderNo | itemNo | orderItemQuantity | user | totalPrice1 | it | 10 | userA | 9.9}} 5. 如何自动化执行单元测试 使用spock框架进行单测可以通过添加maven插件来在maven打包的时候自动执行单元测试代码。 dependencygroupIdorg.spockframework/groupIdartifactIdspock-core/artifactIdversion2.1-groovy-3.0/versionscopetest/scope/dependencydependencygroupIdnet.bytebuddy/groupIdartifactIdbyte-buddy/artifactIdversion1.10.19/versionscopetest/scope/dependency!-- Mandatory plugins for using Spock --plugingroupIdorg.codehaus.gmavenplus/groupIdartifactIdgmavenplus-plugin/artifactIdversion1.12.0/versionexecutionsexecutiongoalsgoalcompile/goalgoalcompileTests/goal/goals/execution/executions/pluginpluginartifactIdmaven-surefire-plugin/artifactIdversion3.0.0-M5/versionconfigurationincludes!-- 指定后缀为Test的文件需要被执行单元测试 --include**/*Test/include/includes/configuration/plugin 6. Spock测试框架中MockStubSpy的区别 Stub桩对象Stub对象用于模拟被测试对象的某些行为。Stub对象通常用来模拟一些外部依赖interface返回指定数据以便于进行单元测试。不能用于用来做行为验证。 def () {given:def inventoryMapper Stub(InventoryMapper)InventoryServce inventoryService new InventoryServiceImpl(inventoryMapper)Inventory inv new Inventory(10)inventoryMapper.selectById(_) invwhen://inventoryService.stockOut(quantity, id)inventoryService.stockOut(5, 1)then:inv.quantity 5} Mock模拟对象Mock对象和Stub对象类似但是可以用来做行为验证所以在spock中通常可以用mock替代stub。 def () {given:def inventoryMapper Mock(InventoryMapper)InventoryServce inventoryService new InventoryServiceImpl(inventoryMapper)Inventory inv new Inventory(10)inventoryMapper.selectById(_) invwhen://inventoryService.stockOut(quantity, id)inventoryService.stockOut(5, 1)then://行为验证inventoryMapper执行了一次stockOut1 * inventoryMapper.stockOut(_)inv.quantity 5} 3. Spy监视对象上面的StubMock都是创建一个假的实例而Spy是在真实实例的基础上类似创建一个包装类它可以记录被测试对象的行为。既保留了原有实例功能的同时还可以做行为验证。 groovydef () {given:def inventoryMapper Stub(InventoryMapper)InventoryServce inventoryService new InventoryServiceImpl(inventoryMapper)Inventory inv Spy(Inventory)inv.setQuantity(10)inventoryMapper.selectById(_) invwhen://inventoryService.stockOut(quantity, id)inventoryService.stockOut(5, 1)then://行为验证inv执行了一次stockOut1 * inv.stockOut(_)inv.quantity 5} 通常来说调用Spy对象的方法会被默认委托给真实的对象来执行即执行真实的方法但是Spy同样也适用Stub行为如 def subscriber Spy(SubscriberImpl, constructorArgs: [Fred])//Spy对象也可以像 Stub对象一样替换掉receive方法返回指定的值subscriber.receive(_) ok 7. Partial Mocks(部分Mock) 7.1 callRealMethod 通常来说Mock可以对class或者interface创建一个fake对象不会执行真实的方法当在写单元测试时有时会需要执行Mock对象的某些真实方法的时候可以callRealMethod的方式来执行。 given:def subscriber Mock(SubscriberImpl)//mock call方法subscriber.call(_) {return called}//通过callRealMethod指定mock对象执行原来的真实方法subscriber.receive(_) { callRealMethod() }then:subscriber.receive() 7.2 spy 通过callRealMethod是一种方式另一种就是通过Spy来实现因为Spy是基于真实的对象创建的那么就可以反过来实现一个对象既可以调用真实方法又可以调用假的方法。 given:def subscriber Spy(SubscriberImpl, constructorArgs: [Fred])//mock call方法subscriber.call(_) {return called}then://这里会直接执行真实方法subscriber.receive() 感谢每一个认真阅读我文章的人礼尚往来总是要有的虽然不是什么很值钱的东西如果你用得到的话可以直接拿走 这些资料对于【软件测试】的朋友来说应该是最全面最完整的备战仓库这个仓库也陪伴上万个测试工程师们走过最艰难的路程希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取
http://www.dnsts.com.cn/news/111113.html

相关文章:

  • 网站正在建设中模板下载织梦模板网站
  • 网站建设的目的及功能定位是啥网站跳转代码 html
  • 网站建设管理员阿里云新增网站
  • 优秀网站的链接网站建设小程序定制开发
  • 百度网站排名优化价格东莞哪家网站建设好
  • 兰州市官网北京搜索引擎关键词优化
  • 手机客户端app下载成都网站建设优化公司
  • 怎么套用模板做网站wordpress admin改名
  • 无线设置网站如何分享自己的wordpress
  • 山东建设监理协会网站无法登录wordpress建站需要多久
  • 用vue-cli做的网站国内网站在国外访问很慢
  • 迅速提高网站排名餐饮装修公司
  • 家装设计效果图网站商城网站开发制作
  • phthon网站开发网站建设的思想
  • erp二次开发好还是网站开发好上传wordpress网站
  • 箱包 东莞网站建设宠物网站开发
  • 网站过期了怎么办wordpress在本地运行很慢
  • 铭做网站建设html网页制作案例
  • 企业网站建设知乎企业服务网站建设方案
  • 查询公司的网站备案官网的建站过程
  • 哪个网站有天天做股市直播的网站模板简易修改
  • 杭州做网站多少钱网络公司企业网站源码
  • 8图片这样的网站怎么做网站等保测评怎么做
  • 欣宝儿在什么网站做直播wordpress模板制作教程下载
  • 网站改版效果图怎么做建设个人网站赚钱的经历
  • 厦门seo网站建设费用app网站建设软件
  • 网络网站制作湛江建设局网站
  • 小说网站的会员充值是怎么做的玉树营销网站建设多少钱
  • 建设银行网站诚聘英才酷虎云建站工具
  • 厦门制作网站企业长沙网站开发哪家好