это исключение генерируется в этом блоке кода junit
List<Method> methods = testClass.getAnnotatedMethods(Test.class);
if (methods.size() == 0) {
errors.add(new Exception("No runnable methods"));
}
Итак, я бы рекомендовал дважды проверить, что у вас определенно есть аннотация @Test для метода, и это действительно org.junit. Тест и эта аннотация доступны во время выполнения.
Вы можете проверить это, взяв klass.getDeclaredMethod ("testReplaceString") и распечатав все аннотации из него.
Если это не помогает, то вы можете отладить библиотеку Junit, поставить точку останова на исключение (обратите внимание, это исключение сгенерировано не в том же месте, где было выброшено) и проверить условия
Кстати, какую версию junit вы используете?
РЕДАКТИРОВАНИЕ: я проверил ваш код, создал новый проект в IDEA, добавил junit 4.13-rc-1 в зависимости и создал два файла.
public class SampleJavaFileTest {
String EXPECTED_OUTPUT_STRING="r3plac3";
@Test
public void testReplaceString() {
Assert.assertEquals(EXPECTED_OUTPUT_STRING, "r3plac3");
}
}
и другой класс
public class ClassLoadDynamically {
public static void main(String[] args) throws Exception {
final File fileForClass = new File(SampleJavaFileTest.class.getProtectionDomain().getCodeSource().getLocation().getPath());
URLClassLoader classLoader = URLClassLoader.newInstance(new URL[] { fileForClass.toURI().toURL() });
Class<?> clazz = Class.forName("SampleJavaFileTest", true, classLoader);
Method testReplaceString = clazz.getDeclaredMethod("testReplaceString");
System.out.println("Get declared methods==>"+ testReplaceString);
System.out.println("Get annotation => "+ testReplaceString.getAnnotation(org.junit.Test.class));
JUnitCore junit = new JUnitCore();
Result result = junit.run(clazz);
System.out.println(result.wasSuccessful());
}
}
Я проверил ваш код, он работает таким образом. Пожалуйста, проверьте, как вы генерируете свой код динамически, похоже, что проблема заключается в неправильной генерации байт-кода, дважды проверьте, как вы устанавливаете аннотации для метода.
Однако, я не уверен, в вашей средеконфигурация по лямбде. В любом случае, я бы рекомендовал, чтобы ваш код работал локально