52

コードをテストするためにhamcrest1.3を使用しています。それは単にサイコロです。生成された数が13未満であることを確認するためにテストしようとしています。生成された数が何であるかを印刷するprintステートメントがありました。生成された数は常に13未満でしたが、テストは常に失敗しました。私が間違っていることはありますか?

これは私がテストしているコードです。

import java.util.Random;

public class Die {
    private int numSides;
    Random rand;

    public Die(int numSides){
        this.numSides = numSides;
        rand = new Random(System.currentTimeMillis());
    }

    public int roll(){
        return rand.nextInt(numSides) + 1;
    }
}

そして、これは私のテストコードです。

import static org.hamcrest.Matchers.*;
import static org.hamcrest.MatcherAssert.assertThat;

import org.junit.Test;

public class DieTest {
    @Test
    public void testRoll() {
        Die x = new Die(12);    
        assertThat(x.roll(), is(lessThan(13)));
    }
}

編集:これは障害スタックトレースです。

java.lang.SecurityException: class "org.hamcrest.Matchers"'s signer information does not match signer information of other classes in the same package
at java.lang.ClassLoader.checkCerts(Unknown Source)
at java.lang.ClassLoader.preDefineClass(Unknown Source)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at DieTest.testRoll(DieTest.java:12)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
4

22 に答える 22

77

これは私が問題を解決するのを助けるサイトです。

http://code.google.com/p/hamcrest/issues/detail?id=128

hamcrest.jarは、ビルドパスのJunitライブラリの前に配置する必要があります。

于 2012-03-11T23:05:55.413 に答える
19

プロジェクト構成からJUnitライブラリを削除しました。JUnitもpomファイルに含まれているので、テストを実行できます。したがって、ソリューションはMavenのライブラリを使用するだけです。

于 2015-04-05T09:04:12.963 に答える
14

Javaビルドパスセクションのプロジェクト設定内のEclipseで、ライブラリJUnitバージョン4.8とhamcrest-coreバージョン1.1を使用する内部JUnitライブラリを以前に追加しました。私の場合、それがこのエラーの原因だったと思います。

私はこの情報をここに残します、多分他の誰かが私の経験から利益を得るでしょう。

于 2013-01-28T16:47:38.087 に答える
11

Mavenプロジェクトを使用している場合は、ビルドパスからJunitライブラリを削除し、代わりにPOMを介してJunitとHamcrestを別々にインポートします。

于 2017-09-27T10:12:24.667 に答える
6

junit.jarではなくjunit-dep.jarを使用します。これはJUnitから依存関係を差し引いたものです。Junit.jarには、古いバージョンのHamcrestが含まれています。

于 2012-03-13T17:41:11.593 に答える
4

まず、POM.xmlファイルにJUnit依存関係が追加されていることを確認してください。

次に、プロジェクトを右クリックしてプロパティに移動し、Javaビルドパスを選択して、[ライブラリ]タブを選択します。

私の場合、Mavenの依存関係、JREおよびJunit4ライブラリがありました。そして、私はJunitライブラリを削除したばかりで、それは私のために機能します。または、問題が発生していたHamcrestとJUnit4のビルド順序が原因で、ライブラリを並べ替えることもできます。

于 2016-01-28T15:38:28.303 に答える
4

Johan Mark(上記)は

$ECLIPSE_HOME\plugins\org.hamcrest.core_1.3.0.v201303031735.jarファイルの名前を次のような名前に変更するか、ファイルを*.bak削除してください。」

ファイルの名前を変更/削除すると、Eclipse Junitライブラリが機能しなくなりましたが、JARファイルをMavenリポジトリからの同じバージョンのコピーに置き換えると、証明書の問題が解消されました。

(Googleの誰かが述べたように、hamcrestのEclipse Junitコピーには証明書の問題がありますが、Mavenコピーにはありません...)

于 2017-10-27T05:30:29.193 に答える
3

Mavenを使用している場合:

手順:

  1. ここから最新のハムクレスト依存関係をPOMに追加しますhttps://mvnrepository.com/artifact/org.hamcrest/hamcrest-all

  2. ここから最新のJUnit依存関係をPOMに追加し ますhttps://mvnrepository.com/artifact/junit/junit

  3. ビルドパスからJUnitライブラリを削除します。

ここに示されているように

そしてここ

  1. 上記のすべての手順を完了したら、プロジェクトを更新して実行します。
于 2019-06-15T21:39:50.283 に答える
2

同じ例外が発生していました。推奨されるbeachw08のように、私は以下を参照しました:

http://code.google.com/p/hamcrest/issues/detail?id=128

投稿の1つは言った:

ファイルの名前を$ECLIPSE_HOME\ plugins \ org.hamcrest.core_1.3.0.v201303031735.jarの名前に変更するか、ファイルを削除します。

私はこれをしました、そしてそれは私の問題を解決しました。

于 2015-01-09T21:26:10.010 に答える
2

次の例外「java.lang.SecurityException:クラス "org.hamcrest.Matchers"の署名者情報が同じパッケージ内の他のクラスの署名者情報と一致しない」が発生した場合は、hamcrestjarがのJunitライブラリの前にあることを確認してください。ビルドパス。順序は、[順序とエクスポート]タブの[Javaビルドパス]の下のプロジェクトプロパティで構成できます。より明確にするために画像リンクの下をクリックしてください:http: //i.stack.imgur.com/Y5R15.png

于 2016-03-11T10:16:28.210 に答える
2

Eclipse->JavaビルドパスのライブラリタブからJUNIT4ライブラリを削除し、機能しました。

于 2019-07-05T15:13:44.627 に答える
2

私も同じ問題を抱えていました。プロジェクトを右クリック/注文してエクスポート/ハムクレストライブラリを最初の位置に移動します。何らかの理由で、Junitライブラリよりも最初に移動する必要があります。

于 2020-04-13T15:50:10.123 に答える
1

ビルドパスからJunit4ライブラリを削除し、ビルドパスにTestNGライブラリを追加し、JavaプログラムでJunit4アノテーションの代わりにTestNGアノテーションをインポートすることで、この問題を解決しました。

于 2015-12-09T06:43:30.097 に答える
1

Eclipseでも同じ問題が発生しましたが、mvnコマンドラインで機能していました。Junitをではなくビルドパスに削除することで解決ました。上記の例は、削除する前のものです。 order and exportここに画像の説明を入力してください

于 2021-05-04T15:01:12.273 に答える
0

ここで詳しく説明したのと同じ問題が発生しました。問題はjunit4jarファイルにあると思います。

eclipse pom editorでjunit4階層を見ると、hamcrest-coreに依存していることがわかります(つまり、hamcrest-coreはデフォルトでコンパイル時にプルされます)。私の単体テストコードでは、hamcrestコレクションMatchers(org.hamcrest.collection)を使用しています。これらはコアjarに含まれておらず、hamcrestへの依存関係を設定しました-すべてpomにあります。これを行うと、hamcrest-coreの包含が複製され、junit hamcrest-coreの依存関係とのバージョンの不一致、したがってセキュリティ例外が発生する可能性があります。hamcrest-all依存関係を削除し、hamcrest-libraryに置き換えたところ、例外はなくなりました。

コアhamcrestのみを使用する場合は、独自の依存関係を設定せず、junitがプルインするバージョンに依存する必要があります。または、別のコメントで提案されているように、junit-depを使用してjunit依存関係を取り除き、hamcrest-allを含めます。

于 2014-11-27T22:57:24.780 に答える
0

私は最近、EclipseとJunitでこの問題を抱えていました。

これを解決するために、私はそれをしました:

1-最新のhamcrest-alljarをここからダウンロードします:https ://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/hamcrest/

2- eclipseインストールフォルダーに移動します:eclipse / plugin /そして、org.hamcrest...jarを見つけます

3-ステップ2jarのバックアップを作成し、それをステップ1 jarに置き換えます(jarステップ2と同じ名前に変更します)。

4-Eclipseを再起動します

その後、私の問題は解決しました。

于 2016-04-01T09:13:10.270 に答える
0

特定のコンテキストでこの問題を解決しようとするときは、上記のスタックトレースは単なる症状であることに注意してください。解決策は一部の人には有効かもしれませんが、他の人には有効ではありません。

例えば:

  • クラスパスでJUnitJARの前にHamcrestJARを配置すると、使用中のJUnitのバージョン(古い)にHamcrestクラスが含まれている場合に機能します。
  • Eclipseによって内部的に使用されるHamcrestのバージョンを、内部バージョンと一致するように名前が変更された「ストック」バージョンでオーバーレイすると、他のEclipseプラグインバンドルが元の内部JARのマニフェスト情報を使用しない場合に機能する可能性があります

私の場合、上記の症状は、内部で使用され、Eclipseによって提供されたHamcrest JARが原因でした。これを「ストック」の名前変更バージョンに置き換えようとすると、Eclipseを起動したときにJUnitに関連するものをロードできませんでした。元の内部バージョンに戻した後、戻ってSecurityExceptionきました。私のために働いた解決策は、7-Zipを使用してJARのマニフェストを削除することでした。これは事実上「署名されていない」JARであり、今では私の特定の構成が機能します。

于 2016-08-26T12:52:43.653 に答える
0

私の環境MacOS+ eclipseで、org.hamcrest.core_1.3.0.v201303031735.jarがJUnit 4にあることがわかったので、junit.jarより先に進めることはできません。

パス〜/ .p2 / pool / plugins /から削除してから、プロジェクトを更新すると、機能します。

于 2017-05-07T11:27:00.340 に答える
0

これは私の問題を解決しました:

$ ECLIPSE_HOME \ plugins \ org.hamcrest.core_1.3.0.v201303031735.jarをMavenまたはプロジェクトのlibのhamcrest-core-xx.jarに置き換えます(明らかに、Eclipse jarと同じ名前に名前を変更します)

于 2017-05-08T11:27:29.437 に答える
0

プロジェクトのビルドプロパティに移動し、JUNITをバージョン4からバージョン3に変更しましたが、正常に動作するようになりました。

興味深いことに、私はまだpom.xmlにバージョン4を持っているので、これは日食の問題だと思う傾向があります(ターミナルを介してテストをビルドして実行できました)。

于 2017-05-31T18:59:42.850 に答える
0

私は次のことをしました:

最初のpomファイルで、junic依存関係からhamcrest-coreを除外し、代わりにhamcrest-allを使用しました。次に、ビルドパスからEclipse JUNITを削除しました。これは、MavenJUNITをオーバーライドするためです。悪い瓶が除外されたので、順序は私の瓶に影響を与えませんでした。

于 2017-12-19T14:21:20.197 に答える
0

私はまったく同じ問題を抱えていました。新しいプロジェクトを作成しましたが、問題は解決しました。

于 2018-05-08T07:40:19.493 に答える