2017-09-25 9 views
1

私はGroovyコードのJUnitテストを書くためにthe Groovy Testing Guideに従おうとしていますが、何も役に立ちません。私は、この持っている場合たとえば、:Groovy:junitのテスト指向の出力

$ groovy Test.groovy 
. 
Time: 0.045 

OK (1 test) 

これは、基本的な出力として罰金ですが、私はどのようなテストケースについてのいくつかの情報を得ることができれば、それはいいだろう:

class Test extends GroovyTestCase { 
    void testCase1() { 
     assertTrue true 
     assertEquals 1, 1 
    } 
} 

をそれから私はこれを取得します実際に走った。何かが失敗したときに大きな問題は、しかし、出力されます。

class Test extends GroovyTestCase { 
     void testCase1() { 
       assertTrue true 
       assertEquals 1, 1 
     } 

     void testCase2() { 
       assertEquals 1, 2 
     } 

     void testCase3() { 
       assertEquals 1, 2 
     } 
} 

での結果:これは素晴らしい出力されません

$ groovy Test.groovy 
..F.F 
Time: 0.046 
There were 2 failures: 
1) testCase2(Test)junit.framework.AssertionFailedError: expected:<1> but was:<2> 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) 
     at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) 
     at groovy.lang.MetaClassImpl.invokeStaticMethod(MetaClassImpl.java:1467) 
     at org.codehaus.groovy.runtime.callsite.StaticMetaClassSite.callStatic(StaticMetaClassSite.java:65) 
     at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:56) 
     at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:194) 
     at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:214) 
     at Test.testCase2(Test.groovy:10) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) 
     at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) 
     at groovy.lang.MetaClassImpl.invokeStaticMethod(MetaClassImpl.java:1446) 
     at org.codehaus.groovy.runtime.InvokerHelper.invokeStaticMethod(InvokerHelper.java:951) 
     at org.codehaus.groovy.runtime.InvokerHelper.invokeStaticMethod(InvokerHelper.java:83) 
     at groovy.lang.GroovyShell.runJUnit3Test(GroovyShell.java:375) 
     at groovy.lang.GroovyShell.runScriptOrMainOrTestOrRunnable(GroovyShell.java:295) 
     at groovy.lang.GroovyShell.run(GroovyShell.java:518) 
     at groovy.lang.GroovyShell.run(GroovyShell.java:507) 
     at groovy.ui.GroovyMain.processOnce(GroovyMain.java:653) 
     at groovy.ui.GroovyMain.run(GroovyMain.java:384) 
     at groovy.ui.GroovyMain.process(GroovyMain.java:370) 
     at groovy.ui.GroovyMain.processArgs(GroovyMain.java:129) 
     at groovy.ui.GroovyMain.main(GroovyMain.java:109) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at org.codehaus.groovy.tools.GroovyStarter.rootLoader(GroovyStarter.java:109) 
     at org.codehaus.groovy.tools.GroovyStarter.main(GroovyStarter.java:131) 
2) testCase3(Test)junit.framework.AssertionFailedError: expected:<1> but was:<2> 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) 
     at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) 
     at groovy.lang.MetaClassImpl.invokeStaticMethod(MetaClassImpl.java:1467) 
     at org.codehaus.groovy.runtime.callsite.StaticMetaClassSite.callStatic(StaticMetaClassSite.java:65) 
     at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCallStatic(CallSiteArray.java:56) 
     at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:194) 
     at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callStatic(AbstractCallSite.java:214) 
     at Test.testCase3(Test.groovy:14) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:93) 
     at groovy.lang.MetaMethod.doMethodInvoke(MetaMethod.java:325) 
     at groovy.lang.MetaClassImpl.invokeStaticMethod(MetaClassImpl.java:1446) 
     at org.codehaus.groovy.runtime.InvokerHelper.invokeStaticMethod(InvokerHelper.java:951) 
     at org.codehaus.groovy.runtime.InvokerHelper.invokeStaticMethod(InvokerHelper.java:83) 
     at groovy.lang.GroovyShell.runJUnit3Test(GroovyShell.java:375) 
     at groovy.lang.GroovyShell.runScriptOrMainOrTestOrRunnable(GroovyShell.java:295) 
     at groovy.lang.GroovyShell.run(GroovyShell.java:518) 
     at groovy.lang.GroovyShell.run(GroovyShell.java:507) 
     at groovy.ui.GroovyMain.processOnce(GroovyMain.java:653) 
     at groovy.ui.GroovyMain.run(GroovyMain.java:384) 
     at groovy.ui.GroovyMain.process(GroovyMain.java:370) 
     at groovy.ui.GroovyMain.processArgs(GroovyMain.java:129) 
     at groovy.ui.GroovyMain.main(GroovyMain.java:109) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at org.codehaus.groovy.tools.GroovyStarter.rootLoader(GroovyStarter.java:109) 
     at org.codehaus.groovy.tools.GroovyStarter.main(GroovyStarter.java:131) 

FAILURES!!! 
Tests run: 3, Failures: 2, Errors: 0 

。このような大規模なスタックトレースは必要ありません。特に、テスト対象のコードについて実際には何も教えていないものがあります。私はより多くの何かを得ることができれば、それははるかに良いだろう、テスト指向のように、:

testCase1: PASS 
testCase2: FAIL 
    junit.framework.AssertionFailedError: expected:<1> but was:<2> 
testCase3: FAIL 
    junit.framework.AssertionFailedError: expected:<1> but was:<2> 

FAILURES!!! 
Tests run: 3, Failures: 2, Errors: 0 

GroovyでのJUnitからより多くのテスト指向の出力を取得する方法はありますか?

+1

Spockを試しましたか? –

+0

@tim_yates私はspockを走らせることができません。明らかにそれはインストールされていないし、私はgradleまたはmaven以外でインストールする方法についての指示を見つけることができないし、私はどちらも使用していない。 – ewok

+1

同様の状況になるスタンドアロンのスポーク仕様 –

答えて

1

私は信じて、あなたはユーザーメッセージを使って組み込みの方法assertで使うことができます。

void testCase2() { 
     assert 1 == 2, 'expected differs from actual' 
} 
+0

のコードを掲載しました。私は 'expected:<1>のデフォルトメッセージではなくカスタムメッセージで完全なスタックトレースを取得しましたが、それは' – ewok

0

あなたはスポックを試してみたい場合は、ここにあなたが必要なコードです:

@Grab('org.spockframework:spock-core:1.1-groovy-2.4') 
import spock.lang.Specification 

class Test extends Specification { 

    def "test case 1"() { 
     expect: 
     1 == 1 
    } 

    def "test case 2"() { 
     expect: 
     1 == 2 
    } 

    def "test case 3"() { 
     expect: 
     1 == 2 
    } 

} 

は、私はまた、(あなたのユースケースに応じて - あなたが指定されていません)をお勧めビルドを使用してmavenやgradleなどのツール。

0

私は、あなたがJavaで単体テストを実行していることに問題があると考えています。これは、アサートが正しく機能する方法であり、例外をスローします。

org.junit.runner.JUnitCoreを実行してテストを実行してみると、結果を要約して(さまざまな形式で、XMLでも)例外を表示する方法を知る必要があります。

ところで、XML出力はGroovyのXML解析能力ではうまくいきます。groovyのアサートは良いですが、小さな絵を描画するための固定幅フォントが必要です。あなた自身が結果を見ているだけであれば、実際にそれらを使って作業している場合、junitのAssertクラスはより良いメッセージを残すかもしれません。

0

stacktraceを持つことをお勧めします。なぜなら、AssertionFailedErrorを生成するのではなく、実際にテストしているクラスが例外をスローした場合には、スタックトレースを必要とするからです。

しかし、あなただけがStackTraceUtils.sanitize使用して、独自の方法ではなく、すべての根底にあるグルーヴィーなもの、知りたいグルーヴィーな例外を除いて、その多くの場合:

import org.codehaus.groovy.runtime.StackTraceUtils 
class Test extends GroovyTestCase { 
    void testCase1() { 
      assertTrue true 
      assertEquals 1, 1 
    } 

    void testCase2() { 
      assertEquals 1, 1 
    } 

    void testCase3() { 
     try { 
      assertEquals 1, 2 
     } catch (Throwable e) { 
      throw StackTraceUtils.sanitize(e) 
     } 
    } 
} 

これは与える:

...F 
Time: 0.047 
There was 1 failure: 
1) testCase3(Test)junit.framework.AssertionFailedError: expected:<1> but was:<2> 

    at Test.testCase3(Test.groovy:15) 
    at org.apache.groovy.plugin.DefaultRunners$Junit3TestRunner.run(DefaultRunners.java:99) 

FAILURES!!! 
Tests run: 3, Failures: 1, Errors: 0 

たぶん誰かがあなたが毎回のテストケースでこれを書かないようにする方法があります...

関連する問題