Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
A New Testing Framework Rgot
Search
ksss
December 12, 2015
Programming
0
1.2k
A New Testing Framework Rgot
Speech of RubyKaigi2015 LT
ksss
December 12, 2015
Tweet
Share
More Decks by ksss
See All by ksss
RaaP
ksss
0
360
Railsの型ファイル自動生成における課題と解決
ksss
4
4k
RBS generation framework using Rack architecture
ksss
0
6.6k
mrubyでruby/specを走らせてみた結果www
ksss
1
2.4k
Rubyに型があると便利か
ksss
4
4.4k
mruby hacking guide
ksss
7
1.8k
Other Decks in Programming
See All in Programming
REXML改善のその後
naitoh
0
150
私のEbitengineの第一歩
qt_luigi
0
410
これからの時代の新標準!SwiftTestingへの移行とトラブルシューティング
uetyo
0
440
(非公開スライド追加)座談会 「Strict ConcurrencyとSwift 6が開く新時代: 私たちはどう生きるか?」
shiz
1
140
プログラマのための音楽入門
cheebow
4
540
ECMAScript、Web標準の型はどう管理されているか / How ECMAScript and Web standards types are maintained
petamoriken
3
370
複雑さに立ち向かうための ソフトウェア開発入門
shiz
2
580
1人で挑むSwiftコンパイラ 〜型システム入門編〜
s_shimotori
0
310
LR で JSON パーサーを作る / Coding LR JSON Parser
junk0612
2
170
令和トラベルにおけるLLM活用事例:社内ツール開発から得た学びと実践
ippo012
0
110
僕が思い描くTypeScriptの未来を勝手に先取りする
yukukotani
3
580
TypeScriptとGraphQLを活用した変化に強いプロダクト作り
bicstone
4
550
Featured
See All Featured
A Modern Web Designer's Workflow
chriscoyier
690
190k
Docker and Python
trallard
39
3k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
246
1.3M
Ruby is Unlike a Banana
tanoku
96
10k
Fontdeck: Realign not Redesign
paulrobertlloyd
80
5.1k
Intergalactic Javascript Robots from Outer Space
tanoku
268
26k
Scaling GitHub
holman
458
140k
What's new in Ruby 2.0
geeforr
340
31k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
33
1.7k
The MySQL Ecosystem @ GitHub 2015
samlambert
250
12k
Making Projects Easy
brettharned
113
5.8k
Building Adaptive Systems
keathley
36
2.1k
Transcript
A New Testing Framework Rgot ksss RubyKaigi2015
! " ksss _ksss_
None
A New Testing Framework was born …
Rgot Ruby + Golang Testing ksss/rgot !
$ gem i rgot ksss/rgot ! ruby 2.0 ʙ
!? ksss/rgot !
Again? ksss/rgot !
Do We Have to Learning New Things? ksss/rgot !
Rgot is Translation from Golang Testing to Ruby ksss/rgot !
Incidentally You Can Learn Golang Testing! ksss/rgot !
Golang ksss/rgot ! package foo_test func TestFooBar(t *testing.T) { if
3 != (1 + 2) { t.Error("failed") } }
Rgot ksss/rgot ! module FooTest def test_foo(t) if 3 !=
(1 + 2) t.error("failed") end end end
Golang-ish ksss/rgot !
Golang ksss/rgot ! $ go test -v === RUN TestFoo
--- PASS: TestFoo (1.01s) === RUN TestBar --- PASS: TestBar (1.00s) === RUN TestBaz --- PASS: TestBaz (1.01s) PASS ok ksss/gotest 3.017s
Rgot ksss/rgot ! $ rgot -v === RUN test_foo ---
PASS: test_foo (1.01s) === RUN test_bar --- PASS: test_bar (1.00s) === RUN test_baz --- PASS: test_baz (1.01s) PASS ok RgotTest 3.042s
Golang ksss/rgot ! package foo_test func BenchmarkQux(b *testing.B) { for
i := 0; i < b.N; i++ { foo.Qux() } }
Rgot ksss/rgot ! module FooTest def benchmark_qux(b) i = 0
while i < b.n Foo.qux i += 1 end end end
Golang ksss/rgot ! package pow_test func BenchmarkPow(b *testing.B) { b.RunParallel(func(pb
*testing.PB) { for pb.Next() { math.Pow(1000.0, 1000.0) } }) }
Rgot ksss/rgot ! module PowTest def benchmark_pow(b) b.run_parallel do |pb|
while pb.next 1000.0 ** 1000.0 end end end end
Golang ksss/rgot ! $ go test -bench . -cpu 2,4
PASS BenchmarkPow-2 100000000 22.3 ns/op BenchmarkPow-4 100000000 12.5 ns/op ok github.com/pow_test 3.522s GOMAXPROCS
Rgot ksss/rgot ! $ rgot --bench . --cpu 2,4 --thread
2,4 PASS benchmark_pow-2(2) 25600000 74 ns/op benchmark_pow-2(4) 81920000 74 ns/op benchmark_pow-4(2) 81920000 39 ns/op benchmark_pow-4(4) 40960000 40 ns/op ok PowTest 13.603s process thread
Golang ksss/rgot ! package foo_test func ExampleFoo { fmt.Println(foo.Say()) //
Output: // foo }
Rgot ksss/rgot ! module FooTest def example_foo puts Foo.say #
Output: # foo end end
Golang ksss/rgot ! $ go test -v === RUN ExampleFoo
--- FAIL: ExampleFoo (0.00s) got: bar want: foo FAIL exit status 1 FAILgithub.com/ksss/gotest 0.005s
Rgot ksss/rgot ! $ rgot -v === RUN example_foo ---
FAIL: example_foo (0.00s) got: bar want: foo FAIL exit status 1 FAILRgotTest 0.001s
Thinking ksss/rgot !
Diversity ksss/rgot !
Testing before Benchmark ksss/rgot !
Testable Sample Code ksss/rgot !
Not Need /test or /spec Dir ksss/rgot !
ksss/rgot !
Short Class Name testing.M => Rgot::M testing.T => Rgot::T testing.B
=> Rgot::B ksss/rgot !
Zero Assert ksss/rgot !
t.error() ksss/rgot !
More Thinking ksss/rgot !
Assert Oriented v.s. Error log Oriented ksss/rgot !
Assert Oriented case ksss/rgot ! mimitest, test-unit, rspec, etc…
case ksss/rgot ! Error log Oriented
Error Report is Important ksss/rgot !
Precise errors are particularly important when the programmer seeing the
errors is not familiar with the code. #https://golang.org/doc/faq#assertions ksss/rgot !
Words ksss/rgot !
Words - assert - should - expect - must minitest,
test-unit, rspec, … ksss/rgot !
Words - want - got - failed - invalid Golang
testing package ksss/rgot !
Words (hypothesis) minitest, test_unit, rspec,… Golang testing package Hard Soft
ksss/rgot !
ksss/rgot !