Goのtestifyが自分 には大 きすぎたので actually
お
あと、
NOTE: ここでいう testifyは、testify/assert
のことです。その
testifyのアサーションメソッド
というわけでまず、
Equal
- 2
値 の比較 は reflect.DeepEqual もしくは bytes.Equal相当 - ポインタは
中身 (値 そのもの)を見 るだけでアドレス比較 はしない - funcは
受 け入 れない
- 2
Exactly
- Equal +
型 の一致 をみている(実状 としてはEqual
も型 が違 うと落 ちる)
- Equal +
Same
- ポインタアドレスの
一致 をみる
- ポインタアドレスの
EqualValues
主 に数値 比較 用 で、型 が変換 可能 で値 が同 じなら pass
IsType
- "Is" とついているが2
値 比較 する - reflect.TypeOf で2
値 の型 を比較 する
- "Is" とついているが2
EqualExportedValues
- Struct
比較 用 - publicなフィールドと
値 が一致 していれば pass
- Struct
これEmpty
というメソッドもあり、いわゆる「empty
と
testifyのインターフェース
testifyは2
シンプルな
assert.Equal(t, expect, got, "they should be equal")
たくさんアサーションするときは New
して t
を
assert := assert.New(t)
assert.Equal(expect, got, "they should be equal")
これはまあそういうもんですよね。
なんですけど、このアサーションの
このExpect/Gotの
assertEqualsやassert_equalの
まあ、
でも、
(なお、expect/gotに
Test Actually
というわけで、testify
2
- Same
- testifyでいうところの Exactly
- 2
値 の比較 は reflect.DeepEqual もしくは bytes.Equal相当 - ポインタは
中身 (値 そのもの)を見 るだけでアドレス比較 はしない - funcは
受 け入 れない 型 の一致 までみる
- SameNumber
- testifyのEqualValues
主 に数値 比較 用 で、型 が変換 可能 で値 が同 じなら pass型 を気 にせず数値 をアサーションしたいときはこっち
- SamePointer
- testifyのSame
- ポインタアドレスの
一致 をみる
2Same
というSame
をSameNumber
や SamePointer
)で
サンプルコードは
package main
import (
"testing"
"github.com/bayashi/actually"
)
func Test(t *testing.T) {
love, err := getLove()
actually.Got(love).True(t)
actually.Got(err).Nil(t)
actually.Got(love).Expect(true).Same(t)
actually.Got(int32(1)).Expect(float64(1.0)).SameNumber(t)
heart := &love
body := heart
actually.Got(heart).Expect(body).SamePointer(t)
}
func getLove() (bool, error) {
return true, nil
}
Got
と Expect
のセッターが
それから、*testing.T
は
なお、actually
ってタイプするのがa
とか acc
がおすすめ)をつけるか、
また、Name("test name")
を
actually.Got(love).True(t, "We expect true love.")
Fail actually
さて、ここまで actually のテストコード
それは、こけたときのレポートです。
その
--- FAIL: Test (0.00s)
testify_test.go:10:
Error Trace: /testify_test.go:10
Error: Not equal:
expected: 123
actual : 1233
Test: Test
Messages: comp 123
このまとまって
なので、
ただし、ただコピーするだけだと
また、
そんな
actually.Got(a).Expect(b).X().Same(t)
X()
というメソッドを
ちなみに、X
は explain と
builder_test.go:133:
Trace: /path/to/src/github.com/bayashi/goverview/builder_test.go:133
Function: TestTree()
Fail reason: Not same
Expected: Dump: "\n┌ 001/\n├── .gitignore\n├── LICENSE: License MIT\n├── go.mod: go 1.18\n└───+ main.go: main\n Func: X\n const: X\n"
Actually got: Dump: "\n┌ 001/\n├── .gitignore\n├── LICENSE: License MIT\n├── go.mod: go 1.19\n└──* main.go: main\n Func: X\n Const: X\n"
Diff Details: --- Expected
+++ Actually got
@@ -4,6 +4,6 @@
├── LICENSE: License MIT
-├── go.mod: go 1.18
-└───+ main.go: main
+├── go.mod: go 1.19
+└──* main.go: main
Func: X
- const: X
+ Const: X
Expected Raw: ---
┌ 001/
├── .gitignore
├── LICENSE: License MIT
├── go.mod: go 1.18
└───+ main.go: main
Func: X
const: X
---
Got Raw: ---
┌ 001/
├── .gitignore
├── LICENSE: License MIT
├── go.mod: go 1.19
└──* main.go: main
Func: X
Const: X
---
やっぱり、
というわけで、
「Goはなぜアサーションを
actually
はいまのところ v1
ではでは。