LYP's Blog


  • 首页

  • 分类

  • 了解我

  • 归档

  • 标签

  • 简历

  • 看书

ut-in-java

发表于 2018-06-04   |  

UT技能可以给你带来什么?

  • 测试:
    • 所想即所得
    • 测试的入口,没有单侧不了的代码
    • 健壮性
    • 代码重构后,验证的手段
  • 学习源码的手段
  • 痛苦: UT 代码是体力活
  • 单侧的维护:
    • 不断补充和优化,工程的单侧是慢慢优化和补充的
    • don’t repeat yourself,做有沉淀的事情

UT tools

1
"write less, check more"
  • Junit
  • Spring Test
  • AssertJ
  • Hamcrest
  • Mockito
  • JSONassert
  • JsonPath
1
2
3
4
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>

test in java

mock /spy in mockito

  • 概念上区别:

    • 一个是会真实的调用,一个是不会产生调用
    • mock 提供的是完全的mock,spy提供的部分mock;
      也就是mock的对象,client 调用非mock 的行为,会出现异常,spy 调用非mock 行为,会按真实的代码逻辑处理;
  • 以这个代码为例 code

  • 为什么提供这两种mock特性?

    • 有时,client 只需要部分的mock行为

@Runwith

  • see https://www.mscharhag.com/java/understanding-junits-runner-architecture
  • runner:BlockJUnit4ClassRunner MockitoJUnitRunner SpringJUnit4ClassRunnerk;

junit

junit4 or junit5? why?

  • junit5 可以多个runner 并发的运行,测试用例能更快的得到结果
  • junit5 使用了java8 的特性
  • junit5 将junit 的结构进行了拆分(多个jar包,可以按需使用特定的jar包)
  • junit5 独立开发,提供了一套新的注解,这个有迁移成本,所以很多基于junit4 的测试框架(例如spring test),没有使用junit5
  • junit5 重写了整个代码,所以理论上工程上可以同时使用junit4 & junit5 (如何同时使用junit4 & junit5 ,可以参考链接link
  • junit5 和junit4 的使用区别,可以参考 reference

test in spring-framework based apps

注解使用

  • @ContextConfiguration

  • @WebAppConfiguration

    • 配置好mvc 集成测试的环境,启动web服务,访问web资源
    • 使用 file:src/main/webapp 作为默认的web 资源目录 (潜台词是你可以指定测试使用的web资源)
  • @ActiveProfiles

  • @EnabledIf @DisabledIf : 告知不要运行某个测试当满足一定的条件时

    • 可以利用这个注解作为元注解,自定义其他的注解,eg:
      1
      2
      3
      4
      5
      6
      7
      @Target({ElementType.TYPE, ElementType.METHOD})
      @Retention(RetentionPolicy.RUNTIME)
      @EnabledIf(
      expression = "#{systemProperties['os.name'].toLowerCase().contains('mac')}",
      reason = "Enabled on Mac OS"
      )
      public @interface EnabledOnMac {}

以下注解 在 SpringJUnit4ClassRunner 下生效

  • @Timed(N)
    单元测试必须在指定时间N(ms)内执行完毕
  • @Repeat(N)
    测试方法执行N 次

更多测试注解,可以参考文档reference link

Test mvc

spring-boot based test

java UT 业界动态

  • Behavior Driven Development
  • java8_Lambdas_based junit5

vim cheatsheet for myself

发表于 2018-06-04   |   分类于 quick notes   |  

此篇主要是记录些自己没有熟悉使用的vim键位技巧

repeat

键位 说明
. 重复上一次改动,支持重复次数指定,支持复制命令的重复,不支持命令行模式的重复
@ 重复最近的一次命令,支持次数的指定

replace

键位 说明
gR 从当前位置开始,一次替换每个字符

move

键位 说明
c{motion} 删除{motion}的数据到寄存器里面并且进入插入模式,cw,caw(change a word),ci(change inside)
C 删除到行尾
cc 删除行,可以指定方向和行数,例如cc4j,代表向下删除3行
{count}s s 即是substitute 的缩写,删除指定数量的字符到寄存器里面,并且进入插入模式,注意区分c
S 删除行,和cc 等价
  • 区分普通的 d 删除,这个不会进入插入模式
  • 以上快捷键在visual 模式也能操作

yank

键位 说明
yi yank inside,例如,yi” 复制“里面的字符
ya yank around ,例如 ya( 复制()里面的字符,包括()
yw yank word

CRON expression

发表于 2017-09-17   |  

cron expression

不知道中文如何翻译,时间条件表达式?。。。
相对正则表达式,这种表达式在命令行工具以及一些开发框架上,都很常见,用来做为定时任务的时间的时间设定
例如:

  • command crontab
  • spring schedule task

都有使用过这种表达式

阅读全文 »

xargs tutorial

发表于 2017-07-14   |   分类于 tools   |  

man

buid and execute command lines from standard input
reads data from standard input (stdin) and executes the command (supplied to it as argument) one or more times based on the input read

使用

arg 是参数,xargs X参数? 这样会好理解一些

使用方式:

1
xargs [OPTION]... COMMAND [INITIAL-ARGS]...

运行COMMAND ,参数是 INITIAL-ARGS(如果有的话)以及可以是使用xargs 读取到的文件或者其他输出

什么情况需要选用这个命令?

看几条对比的命令

1
2
find . -name "*.md" |xargs grep thought # 这个命令是将找的文件的内容里面过滤字样 thought
find . -name "*.md" |grep weekly-0519.md # 这个命令是将找到的文件,过滤出文件名中带有字样 thought
1
xargs -a input.txt ls -ltr #input.txt 里面有本目录下的几个文件名

常见用法

case 1 [通过xargs 使命令执行根据参数列表执行多次]

-L [number]

  • 等同于用法 -l[line-number]
1
2
xargs -a keyword.txt -L 1 find . -name
xargs -a keyword.txt -l1 find . -name

参数是按行展开的,每行一个参数,表示每次传递number行的参数给command

-n [number]

当参数是按空格间隔开的时候,想命令按空格为间隔,读取参数列表,每次读取number 个参数给后面的command

例如:从stdin 里面,每次读取一个参数给find 查找

case 2

-a

xargs 会读取文件作为输入

1
xargs -a input.txt ls -lart # 从文件里面读取参数

case 3

-p

迫使每次执行command 之前询问你是否执行这个命令
例如:

1
xargs -a input.txt -l1 -p find . -name

示例

-i

1
ls |grep weekly |xargs -i mv {} weekreport

参考

  • 8 Practical Examples of Linux Xargs Command for Beginners

macos 使用最新的GNU 命令行工具

发表于 2017-07-12   |   分类于 mac os   |  

喜欢使用命令行工具的人,使用惯了linux 发行版的人,在mac 上使用命令行的话,有些命令行要么版本老,不支持一些常用的参数,要么参数不一致,也是头痛。
举几个例子:

  • xargs
    macos 不支持参数 -a
  • ps
    macos 和linux 的参数基本不一样
  • netstat
    macos 和linux 的参数基本不一样

恭喜你,本篇blog 教你搞定这些问题

阅读全文 »

transfer maven to gradlew

发表于 2017-06-25   |  

sum

公司目前的工程都是用maven 构建,自己平时也习惯使用maven 来构建项目,本文从个maven的熟悉者的角度,教你如何快熟入门gradle
,所以本文面向的是那些熟悉maven ,想快速入门gradle 的工程师

阅读全文 »
12…4
罗宇平

罗宇平

keep thinking!

22 日志
13 分类
31 标签
GitHub
© 2015.7 - 2018 罗宇平
由 Hexo 强力驱动
主题 - NexT.Pisces