Forwarded from dnaugsuz
不是没有道理,我最近打算对于一些比较完整的东西可以拿 TeX 排出来(对于有数学公式或者 tikz 图的那些)或者拿 HTML 写,这样可以顺便练习一下排版能力。
Forwarded from 羽毛的小白板
Forwarded from 羽毛的小白板
看了下 Android 的 SparseArray 的实现,似乎和 .Net 的 SortedList<K, V> 没什么区别
🤔 这个星期本来有很多事情需要讲的(主要是技术,而且我想说我要用 imperative 的 Kotlin 写个 BCE 程序,顺便学学写我的第一个矩阵等式求解算法)
可是呢,duangsuse 的身体目前比较糟糕,所以为了健康还是必须 11 点下机的。
但愿一切都好吧。 #life #tech #dev #backend #algorithm
可是呢,duangsuse 的身体目前比较糟糕,所以为了健康还是必须 11 点下机的。
但愿一切都好吧。 #life #tech #dev #backend #algorithm
#GitHUb #Kotlin #issue https://github.com/icela/FriceEngine/issues/83
(当然冰封现在早就不搞这种事情『计算机图形上的封装』了...)
org.frice.anim.scale.SimpleScale 类中的 obj.scale(deltaTime * x, deltaTime * x) 这句后面应该是y吧?写错了。虽然 Frice 的项目持续集成构建和测试都有做(
(当然冰封现在早就不搞这种事情『计算机图形上的封装』了...)
GitHub
代码问题 · Issue #83 · icela/FriceEngine
org.frice.anim.scale.SimpleScale 类中的 obj.scale(deltaTime * x, deltaTime * x) 这句后面应该是y吧?
This media is not supported in your browser
VIEW IN TELEGRAM
#Java #Ruby #Kotlin #Test #Dev
https://docs.cucumber.io/guides/10-minute-tutorial/
一个『类似自然语言』的 Specification Tests 框架:
快速学习一下如何来使用它!(本频道一直引以为豪的是,在其他频道只『给个链接、点个 Star』的时候,本频道会给予大家快速上手讲解)
以下示例基于 Java 8(实际上 Java 1.1 都可以用)
首先,你的直觉要并入这些,以便快速地理解使用方式:
1. 所谓『功能性』软件测试(Behavior-Driven Tests),是因为要确定软件的『某一项功能』是否能正常如预期地工作
此外,还流行以下测试侧面方案:完整验收测试 / (就测试层面而言)黑盒白盒测试 / 兼容性和性能(弹性... 负载... 压力)测试 / 回归测试(验证修复方案是否能用) / Smoke (快速的简单完整功能测试)
2. 这种测试是这样的,你们看看(主要是因为很多人对功能性测试和洋文的直觉不好,我翻译一下):
Feature: Users can change their avatar
We expect that normal users CAN change their avatar
Scenario: The user is normal user
Given a normal user
When he wants to update his avatar
Then he will able to update his avatar
Scenario: The user is blocked
Given a banned user
When he wants to update his avatar
Then he will not able to update his avatar
类似的测试可能还有很多,比如,被封禁的用户不能更改自己的用户名、不能发布评论...
设想一下,如果我们有这样的软件需要测试,那么,有一种 DSL 来帮助我们把测试写得更好,更具备可读性和可维护性,减少余赘代码,岂不美栽? 🤔
这门 DSL 叫做 Cucumber. (准确的说,叫 Gherkin,它只是 Cucumber 测试框架的一部分)
至于包管理什么的杂七杂八的内容,你们知道那是码农的工作,我们不用管(待会『三声,上声』会『四声,去声』讲)
我们来看看上面的例子该怎么写(伪代码,不准喷不是函数式,函数式什么的我会独立讲,再说工程第一是吧)
import cucumber.api.java.en.Given;
import cucumber.api.java.en.When;
import cucumber.api.java.en.Then;
import static org.junit.Assert.*;
mvn archetype:generate 记好了,这些参数
1. archtype 的 Group、ArtifactId、Version
2. 你项目的 Group、AId、Version
3.
以上参数全都是 camelCased 的,风格为 Java 的单 dash(-) 前缀。
(相关知识: Maven Coordinate:
记住,G:A:V 就可以吊打很多连 Maven 是啥,用的啥模型都不知道的 Android Dev 了(跑,但这的确是事实,因为实际上 Android 主要还是和 Android API 和 XML / 组件/View 模型什么的杠,有些入门萌新连 Gradle/Groovy/Maven 到底是做什么的都不知道,也不知道 Dependency Scope、Artifact、Tasks 之类的东西,2333333)。
然后在项目目录里
上面的 Feature/Scenario/Given/When/Then 语法结构,可以在项目的 Test Resource 下的指定 Java 包里创建,一般放在
而 Tests 的代码,就放在同一个 Java 包的
== 搞基一点: 使用 DSL 指定输入数据
别用 Scenario 了。用 Scenario Outline
Scenario Outline:
Given Arithmetic expression "<expr>"
When I asked the result
Then It should be "<answer>"
Examples:
| 1+1 | 2
| 0*9 | 0
| 0+3 | 3
其他的 matching 上面讲过了,不说了。
我觉得还不错。 +1
剩下的更高端一点的内容呢,我没时间看,算了,给个语法结构目录就跑。
至于中文支持呢,有,这里可以看到,不过具体是怎么实现的呢(我不说最无聊的句构解析器部分,因为的确很无聊)?其实 Runtime 会根据对应平台的 Code Snippet 自己生成相应的实际 API 类编译加载,不过 IDE 用的包我不清楚是哪里生成的,找了很久,没时间管这些。
== FIX: 找了很久我没看到他们用 sun 的 javac API,我又看了一会才知道,这整个就是一代码生成器程序...
https://docs.cucumber.io/guides/10-minute-tutorial/
一个『类似自然语言』的 Specification Tests 框架:
快速学习一下如何来使用它!(本频道一直引以为豪的是,在其他频道只『给个链接、点个 Star』的时候,本频道会给予大家快速上手讲解)
以下示例基于 Java 8(实际上 Java 1.1 都可以用)
首先,你的直觉要并入这些,以便快速地理解使用方式:
1. 所谓『功能性』软件测试(Behavior-Driven Tests),是因为要确定软件的『某一项功能』是否能正常如预期地工作
此外,还流行以下测试侧面方案:完整验收测试 / (就测试层面而言)黑盒白盒测试 / 兼容性和性能(弹性... 负载... 压力)测试 / 回归测试(验证修复方案是否能用) / Smoke (快速的简单完整功能测试)
2. 这种测试是这样的,你们看看(主要是因为很多人对功能性测试和洋文的直觉不好,我翻译一下):
特性: 更改头像
“我们的用户可以上传自定义头像以取代默认头像”
场景: 普通用户可以更改自己的头像
情况: 这个用户是普通用户
当: 他想更新自己的头像时
那么: 他应该能够成功更新自己的头像
场景: 被我们 Block 的用户不能更改自己的头像
情况: 这个用户是封禁用户
当: 他想更新自己的头像时
那么: 他应该无法成功更新自己的头像
或者说:Feature: Users can change their avatar
We expect that normal users CAN change their avatar
Scenario: The user is normal user
Given a normal user
When he wants to update his avatar
Then he will able to update his avatar
Scenario: The user is blocked
Given a banned user
When he wants to update his avatar
Then he will not able to update his avatar
类似的测试可能还有很多,比如,被封禁的用户不能更改自己的用户名、不能发布评论...
设想一下,如果我们有这样的软件需要测试,那么,有一种 DSL 来帮助我们把测试写得更好,更具备可读性和可维护性,减少余赘代码,岂不美栽? 🤔
这门 DSL 叫做 Cucumber. (准确的说,叫 Gherkin,它只是 Cucumber 测试框架的一部分)
至于包管理什么的杂七杂八的内容,你们知道那是码农的工作,我们不用管(待会『三声,上声』会『四声,去声』讲)
我们来看看上面的例子该怎么写(伪代码,不准喷不是函数式,函数式什么的我会独立讲,再说工程第一是吧)
import cucumber.api.java.en.Given;
import cucumber.api.java.en.When;
import cucumber.api.java.en.Then;
import static org.junit.Assert.*;
public class Stepdefs:
boolean blocked = false;
Exception gotException;
@Given("a normal user")
fun givenNormalUser() = Unit
@Given("a banned user")
fun givenBannedUser() = { blocked = true }
@When("he wants to update his avatar")
fun askedUpdateAvatar() {
try { UserResource.updateAvatar(UserResource.findUser { it.banned == blocked }.first, Avatar.fromURL("https://example.org/a.png")) }
catch (SecurityException e) { gotException = e }
}
@Then("^he will (.*) to update his avatar$")
fun itChecksUserPermission(String desc) {
when (desc) {
"able" -> assertNull(gotException)
"not able" -> assertNotNull(gotException)
}
}
下面是无聊的码农内容,就是包管理的,虽然这种东西比较 trivial 本身也是码农内容(跑)mvn archetype:generate 记好了,这些参数
1. archtype 的 Group、ArtifactId、Version
2. 你项目的 Group、AId、Version
3.
-DinteractiveMode=false 全自动生成以上参数全都是 camelCased 的,风格为 Java 的单 dash(-) 前缀。
(相关知识: Maven Coordinate:
Group:ArtifactId:[packaging[:classifier]]:Version)记住,G:A:V 就可以吊打很多连 Maven 是啥,用的啥模型都不知道的 Android Dev 了(跑,但这的确是事实,因为实际上 Android 主要还是和 Android API 和 XML / 组件/View 模型什么的杠,有些入门萌新连 Gradle/Groovy/Maven 到底是做什么的都不知道,也不知道 Dependency Scope、Artifact、Tasks 之类的东西,2333333)。
然后在项目目录里
mvn test 就可以运行测试。上面的 Feature/Scenario/Given/When/Then 语法结构,可以在项目的 Test Resource 下的指定 Java 包里创建,一般放在
src/test/resource/<package>/ 里,必须以 .feature 为后缀名,前缀名随便而 Tests 的代码,就放在同一个 Java 包的
Stepdefs.java 类里,然后代码上面那样写。== 搞基一点: 使用 DSL 指定输入数据
别用 Scenario 了。用 Scenario Outline
Scenario Outline:
Given Arithmetic expression "<expr>"
When I asked the result
Then It should be "<answer>"
Examples:
| 1+1 | 2
| 0*9 | 0
| 0+3 | 3
其他的 matching 上面讲过了,不说了。
我觉得还不错。 +1
剩下的更高端一点的内容呢,我没时间看,算了,给个语法结构目录就跑。
至于中文支持呢,有,这里可以看到,不过具体是怎么实现的呢(我不说最无聊的句构解析器部分,因为的确很无聊)?其实 Runtime 会根据对应平台的 Code Snippet 自己生成相应的实际 API 类编译加载,不过 IDE 用的包我不清楚是哪里生成的,找了很久,没时间管这些。
== FIX: 找了很久我没看到他们用 sun 的 javac API,我又看了一会才知道,这整个就是一代码生成器程序...
cucumber.io
Cucumber is a tool for running automated acceptance tests, written in plain language. Because they're written in plain language, they can be read by anyone on your team, improving communication, collaboration and trust.
This media is not supported in your browser
VIEW IN TELEGRAM