0

JUnitCore.runClasses() を使用しようとしていますが、次のコードを使用して実行できます

JUnitCore.runClasses(testClass.class);

しかし、runClasses() は任意の数のパラメーターを取ることができるので、興味がありました。次のようなコードを使用することは可能ですか?

Class c = testClass.class;
JUnitCore.runClasses(c);

または

List<Class> c = new ArrayList<>{test1.class, test2.class, test3.class};
JUnitCore.runClasses(c);

java.io.File タイプを JUnitCore.runClasses() に渡そうとすると、次のエラーが発生するので、これを求めています。

no suitable method found for runClasses(java.io.File)
method org.junit.runner.JUnitCore.runClasses(java.lang.Class<?>...) is not applicable
  (argument type java.io.File does not conform to vararg element type java.lang.Class<?>)
method org.junit.runner.JUnitCore.runClasses(org.junit.runner.Computer,java.lang.Class<?>...) is not applicable
  (actual argument java.io.File cannot be converted to org.junit.runner.Computer by method invocation conversion)
4

2 に答える 2

2

私はあなたが次のことをしようとしていると仮定します:

JUnitCore を使用して実行する Java クラスを含むファイルがあります。

これを達成するには、次のことを行う必要があります。

  1. クラスをロードします。これは、カスタム クラス ローダーを使用して行うことができます。より良いアプローチは、クラスをアプリケーションに含めることです
  2. これで、JUnitCore.runClasses(loadedClass); を呼び出すことができます。

コードサンプル:

File file = new File("path to your file");
File dir = file.getParentFile();
URL url = new URL("file://" + dir.getAbsolutePath());
URLClassLoader classLoader = new URLClassLoader(new URL[]{url});
Class<?> clazz = classLoader.findClass("ClassName");
JUnitCore.runClasses(clazz);

この例は、クラスにパッケージがない場合にのみ機能します。クラスローディングプロセスを制御する独自のクラスローダーを作成できます。このクラスローダーの仕組みについては、URLClassLoaderの javadoc を参照してください。カスタム クラス ローダーを作成するには、このを参照してください。

于 2012-08-15T11:35:16.023 に答える
0

すべての TestClass を含む TestSuite クラスを作成することもできます。そして、あなたはそれを呼び出すことができます

JunitCore.runClasses(TestSuite.class);

TestSuite クラスには、次のような TestClass のリストが含まれています

@RunWith(Suite.class)
@Suite.SuiteClasses({
    Test1.class,
    Test2.class
})
于 2014-09-03T14:59:43.017 に答える