「そろそろPower Assertについてひとこと言っておくか」に、SpockのPower Assertならどうだろう?と思って試してみたけど
そろそろPower Assertについてひとこと言っておくか
SpockのPower Assertなら差分だしてくれたような記憶があったので、試してみた。
結論
[twitter:@bleis] さんが欲しい差分を先に表示はできない。
@Grapes( @Grab(group='org.spockframework', module='spock-core', version='0.7-groovy-2.0') ) import groovy.transform.Canonical import spock.lang.* class SomeDataTest extends Specification { def "文字列のメンバーの比較だとどうなる?"() { def a = new SomeData("very long long long sting", 19) def b = new SomeData("very long long long string", 20) expect: assert a.str == b.str } def "数値のメンバーの比較だとどうなる?"() { def a = new SomeData("very long long long sting", 19) def b = new SomeData("very long long long string", 20) expect: assert a.i == b.i } def "インスタンスの比較だとどうなる?"() { def a = new SomeData("very long long long sting", 19) def b = new SomeData("very long long long string", 20) expect: assert a == b } } @Canonical class SomeData { String str int i }
実行結果
JUnit 4 Runner, Tests: 3, Failures: 3, Time: 292 Test Failure: 文字列のメンバーの比較だとどうなる?(SomeDataTest) Condition not satisfied: a.str == b.str | | | | | | | | | very long long long string | | | SomeData(very long long long string, 20) | | false | | 1 difference (96% similarity) | | very long long long st(-)ing | | very long long long st(r)ing | very long long long sting SomeData(very long long long sting, 19) at SomeDataTest.文字列のメンバーの比較だとどうなる?(test.spock:12) Test Failure: 数値のメンバーの比較だとどうなる?(SomeDataTest) Condition not satisfied: a.i == b.i | | | | | | 19| | 20 | | SomeData(very long long long string, 20) | false SomeData(very long long long sting, 19) at SomeDataTest.数値のメンバーの比較だとどうなる?(test.spock:19) Test Failure: インスタンスの比較だとどうなる?(SomeDataTest) Condition not satisfied: a == b | | | | | SomeData(very long long long string, 20) | false SomeData(very long long long sting, 19) at SomeDataTest.インスタンスの比較だとどうなる?(test.spock:26)
文字列に限って言えば差分はでてる。でも最初ではなく比較の途中だ。
1 difference (96% similarity) very long long long st(-)ing very long long long st(r)ing
インスタンスの比較だとでない。
ごめんなさい。ごめんなさい。
[twitter:@nobeans] さんが既になんか試してた。
でも、混じって見にくいのが解消しないようだ。
bleisさんの「そろそろPower Assertについてひとこと言っておくか」に纏わるお試しコード
import spock.lang.Specification class MorePowerAssertSpec extends Specification { def obj1 = new Hoge(name: "あいうえお", value: "ほげ") def obj2 = new Hoge(name: "あいえお", value: "ほけ") def obj3 = new Foo(name: "あいうえお", value: "ほげふう", extra: "ふう") def setup() { Object.metaClass.p = { delegate.properties.toString() } } void "オブジェクトのリッチな比較: 同一インスタンス同士"() { expect: obj1.p() == obj1.p() obj2.p() == obj2.p() obj3.p() == obj3.p() } void "オブジェクトのリッチな比較: 同一クラスの別インスタンス同士"() { expect: obj1.p() == obj2.p() } void "オブジェクトのリッチな比較: 別クラス同士"() { expect: obj1.p() == obj2.p() } class Hoge { def name def value } class Foo { def name def value def extra } }
オブジェクトのリッチな比較: 同一クラスの別インスタンス同士(MorePowerAssertSpec) Condition not satisfied: obj1.p() == obj2.p() | | | | | | | | | [value:ほけ, class:class MorePowerAssertSpec$Hoge, name:あいえお] | | | MorePowerAssertSpec$Hoge@5b2f13ef | | false | | 2 differences (98% similarity) | | [value:ほ(げ), class:class MorePowerAssertSpec$Hoge, name:あい(う)えお] | | [value:ほ(け), class:class MorePowerAssertSpec$Hoge, name:あい(-)えお] | [value:ほげ, class:class MorePowerAssertSpec$Hoge, name:あいうえお] MorePowerAssertSpec$Hoge@518c7084 at MorePowerAssertSpec.groovy:44) |Running 4 spock tests... 3 of 4 --Output from オブジェクトのリッチな比較: 別クラス同士-- オブジェクトのリッチな比較: 別クラス同士(MorePowerAssertSpec) Condition not satisfied: obj1.p() == obj2.p() | | | | | | | | | [value:ほけ, class:class MorePowerAssertSpec$Hoge, name:あいえお] | | | MorePowerAssertSpec$Hoge@7a053e2d | | false | | 2 differences (98% similarity) | | [value:ほ(げ), class:class MorePowerAssertSpec$Hoge, name:あい(う)えお] | | [value:ほ(け), class:class MorePowerAssertSpec$Hoge, name:あい(-)えお] | [value:ほげ, class:class MorePowerAssertSpec$Hoge, name:あいうえお] MorePowerAssertSpec$Hoge@28c08f61 at MorePowerAssertSpec.groovy:50)
おまけ
期限はなんか以前にTogetterのがあったな。
pythyon(pytest)の方が古いようだ。