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.3k
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
620
Railsの型ファイル自動生成における課題と解決
ksss
4
4.7k
RBS generation framework using Rack architecture
ksss
1
7.3k
mrubyでruby/specを走らせてみた結果www
ksss
1
2.5k
Rubyに型があると便利か
ksss
4
4.6k
mruby hacking guide
ksss
7
1.9k
Other Decks in Programming
See All in Programming
プロダクト志向なエンジニアがもう一歩先の価値を目指すために意識したこと
nealle
0
120
PHP 8.4の新機能「プロパティフック」から学ぶオブジェクト指向設計とリスコフの置換原則
kentaroutakeda
2
680
datadog dash 2025 LLM observability for reliability and stability
ivry_presentationmaterials
0
330
deno-redisの紹介とJSRパッケージの運用について (toranoana.deno #21)
uki00a
0
160
git worktree × Claude Code × MCP ~生成AI時代の並列開発フロー~
hisuzuya
1
520
“いい感じ“な定量評価を求めて - Four Keysとアウトカムの間の探求 -
nealle
0
260
GoのGenericsによるslice操作との付き合い方
syumai
3
700
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
250
ReadMoreTextView
fornewid
1
490
GitHub Copilot and GitHub Codespaces Hands-on
ymd65536
1
130
WindowInsetsだってテストしたい
ryunen344
1
200
すべてのコンテキストを、 ユーザー価値に変える
applism118
2
980
Featured
See All Featured
Statistics for Hackers
jakevdp
799
220k
KATA
mclloyd
30
14k
The Cost Of JavaScript in 2023
addyosmani
51
8.5k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
138
34k
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
Six Lessons from altMBA
skipperchong
28
3.9k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
5
230
Build The Right Thing And Hit Your Dates
maggiecrowley
36
2.8k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
46
9.6k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.7k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.7k
How to Think Like a Performance Engineer
csswizardry
24
1.7k
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 !