2016-05-05 9 views
1

私はこのようなメッセージを受け取りました。JUnitテストが失敗したときにユーザーフレンドリーなメッセージを表示

com.controller.Test1 > test FAILED 
java.lang.NoSuchMethodError at Test1.java:18 

テストコンパイルの依存関係は

testCompile "junit:junit:4.11", 
     'org.mockito:mockito-all:1.10.19', 
     'com.jayway.jsonpath:json-path:2.2.0', 
     'org.hamcrest:hamcrest-all:1.3', 
     'org.flywaydb.flyway-test-extensions:flyway-dbunit-spring4-test:4.0' 

であり、これは私のテストコードです。

package com.controller; 

import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.mockito.runners.MockitoJUnitRunner; 

import static org.hamcrest.Matchers.instanceOf; 
import static org.junit.Assert.assertThat; 


@RunWith(MockitoJUnitRunner.class) 
public class Test1 { 

    @Test 
    public void test(){ 
     assertThat(Long.valueOf(1), instanceOf(Integer.class)); 
    } 
} 

このようなメッセージが必要です。

が期待される:java.lang.Integerの のインスタンスが、を:< 1L>java.lang.NoSuchMethodErrorは、具体的にJUnitのに関連していないがjava.lang.Long

+0

'assertTrue(" messageIfFails "、condition)'を使うのはどうですか? – ha9u63ar

+1

または 'org.junit.Assert.assertThat(String、Object、Matcher <?super Object>)'?最初のparam(文字列)は、メッセージに含まれる理由です。つまり、あなたのテストにはアサーションエラーではなく、 'NoSuchMethodError'で失敗しているので、クラスパスに問題があると思います。 – Taylor

答えて

2

あります。代わりに、コンパイラのクラスパス上にあったクラスのバージョンが、ランタイムクラスパス上にあるクラスのバージョンと異なることを示します。

クラッシュの理由は、コードでインポートされたクラスの代わりに使用されているorg.hamcrest.MatcherクラスがJUnitに付属しているためです。 matcherを除外するには、mockito-allの代わりにmockito-coreをインポートに使用してください。

関連する問題