2017-07-10 3 views
0

私はかなり大きなコードベースを持っています。テストクラスの1つが、次の静的インポートのコンパイル中に失敗しているimportステートメントを使用しています。 import文とconstainsString()への実際の呼び出しがどこで行われるかは失敗します。JUnitMatchers.containsStringの静的インポートは機能しますが、CoreMatchers.containsStringは使用しません。

import static org.hamcrest.CoreMatchers.containsString; 

次のように正確なエラーは次のとおりです。JUnitMatchers.containsStringに上記の静的インポートを変更

[ERROR] MyClassName:[...] error: cannot find symbol 
[ERROR] symbol: method containsString(String) 
[ERROR] location: class MyClassName 

は問題が修正されます。

import static org.junit.matchers.JUnitMatchers.containsString; 

私の効果的なのpom.xmlは、以下の関連を持っています依存関係:

junit:jUnit:4.11 
org.hamcrest:hamcrest-all:1.1 
org.mockito:mockito-all:1.9.5 

現実にはCoreMatchers.containsStringの賛成で廃止されたときにそう、質問は本当になぜ、成功

  1. JUnitMatchers.containsStringされていますか?
  2. ライブラリのバージョンが間違っている場合は、どうすれば正しいバージョンを使用できますか?

答えて

2

ハムクレスト1.1にはcontainsStringメソッドがありません。 (どうやら、comment on this commitあたりとして、以前にクラスが生成されていた)情報源を見つけることができませんでしたが、我々は、逆コンパイル、クラスを使用することができます

public class CoreMatchers { 
    public static <T> Matcher<T> is(Matcher<T> matcher) { 
     return Is.is(matcher); 
    } 

    public static <T> Matcher<T> is(T value) { 
     return Is.is(value); 
    } 

    public static Matcher<Object> is(Class<?> type) { 
     return Is.is(type); 
    } 

    public static <T> Matcher<T> not(Matcher<T> matcher) { 
     return IsNot.not(matcher); 
    } 

    public static <T> Matcher<T> not(T value) { 
     return IsNot.not(value); 
    } 

    public static <T> Matcher<T> equalTo(T operand) { 
     return IsEqual.equalTo(operand); 
    } 

    public static Matcher<Object> instanceOf(Class<?> type) { 
     return IsInstanceOf.instanceOf(type); 
    } 

    public static <T> Matcher<T> allOf(Matcher... matchers) { 
     return AllOf.allOf(matchers); 
    } 

    public static <T> Matcher<T> allOf(Iterable<Matcher<? extends T>> matchers) { 
     return AllOf.allOf(matchers); 
    } 

    public static <T> Matcher<T> anyOf(Matcher... matchers) { 
     return AnyOf.anyOf(matchers); 
    } 

    public static <T> Matcher<T> anyOf(Iterable<Matcher<? extends T>> matchers) { 
     return AnyOf.anyOf(matchers); 
    } 

    public static <T> Matcher<T> sameInstance(T object) { 
     return IsSame.sameInstance(object); 
    } 

    public static <T> Matcher<T> anything() { 
     return IsAnything.anything(); 
    } 

    public static <T> Matcher<T> anything(String description) { 
     return IsAnything.anything(description); 
    } 

    public static <T> Matcher<T> any(Class<T> type) { 
     return IsAnything.any(type); 
    } 

    public static <T> Matcher<T> nullValue() { 
     return IsNull.nullValue(); 
    } 

    public static <T> Matcher<T> nullValue(Class<T> type) { 
     return IsNull.nullValue(type); 
    } 

    public static <T> Matcher<T> notNullValue() { 
     return IsNull.notNullValue(); 
    } 

    public static <T> Matcher<T> notNullValue(Class<T> type) { 
     return IsNull.notNullValue(type); 
    } 

    public static <T> Matcher<T> describedAs(String description, Matcher<T> matcher, Object... values) { 
     return DescribedAs.describedAs(description, matcher, values); 
    } 
} 

は中央リポジトリにバージョン1.2を見つけることができませんでしたが、but 1.3を定義しその方法(といくつかの他の方法)。

JUnit 4.11(および4.12も)は既にHamcrest 1.3を参照していますが、mockito-1.9.5 references v1.1(依存関係をスクロールする)を参照しています。またmvn dependency:treeを実行することで、これを見ることができます:

[INFO] \- org.mockito:mockito-core:jar:1.9.5:compile 
[INFO] +- org.hamcrest:hamcrest-core:jar:1.1:compile 
[INFO] \- org.objenesis:objenesis:jar:1.0:compile 

--------------- 

[INFO] +- junit:junit:jar:4.11:compile 
[INFO] | \- org.hamcrest:hamcrest-core:jar:1.3:compile 

実際のポンポンを見ない前に、あなたのポンポンで宣言されているmockito明示的に、または多分、私はどのように言うことはできませんが、何とかV1.1は、1.3よりも優先されますジュニット。

<dependency> 
    <groupId>org.hamcrest</groupId> 
    <artifactId>hamcrest-all</artifactId> 
    <version>1.3</version> 
    <scope>test</scope> 
</dependency> 
:だから、あなたはあなたのポンポンでのJUnitとmockito順番を入れ替える、または明示的に直接 オーバーライド推移バージョンにHamcrest 1.3を定義してみてください
関連する問題