java.displaces를 클릭합니다.예외:JUnit 실행에 실행 가능한 메서드 예외가 없습니다.
./opt/junit/
JAR( 및 합니다.
java -cp hamcrest-core-1.3.jar:junit.jar:. org.junit.runner.JUnitCore TestRunner
TestJunit 클래스:
import org.junit.Test;
import static org.junit.Assert.assertEquals;
public class TestJunit {
@Test
public void testAdd() {
String str= "Junit is working fine";
assertEquals("Junit is working fine",str);
}
}
Test Runner:
import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;
public class TestRunner {
public static void main(String[] args) {
Result result = JUnitCore.runClasses(TestJunit.class);
for (Failure failure : result.getFailures()) {
System.out.println("fail ho gaya"+failure.toString());
}
System.out.println("passed:"+result.wasSuccessful());
}
}
이 실행에서 다음과 같은 예외가 발생합니다.
JUnit version 4.11
.E
Time: 0.003
There was 1 failure:
1) initializationError(TestRunner)
java.lang.Exception: No runnable methods
at org.junit.runners.BlockJUnit4ClassRunner.validateInstanceMethods(BlockJUnit4ClassRunner.java:169)
at org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:104)
at org.junit.runners.ParentRunner.validate(ParentRunner.java:355)
at org.junit.runners.ParentRunner.<init>(ParentRunner.java:76)
at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:57)
at org.junit.internal.builders.JUnit4Builder.runnerForClass(JUnit4Builder.java:10)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
at org.junit.runner.Computer.getRunner(Computer.java:40)
at org.junit.runner.Computer$1.runnerForClass(Computer.java:31)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:101)
at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:87)
at org.junit.runners.Suite.<init>(Suite.java:80)
at org.junit.runner.Computer.getSuite(Computer.java:28)
at org.junit.runner.Request.classes(Request.java:75)
at org.junit.runner.JUnitCore.run(JUnitCore.java:117)
at org.junit.runner.JUnitCore.runMain(JUnitCore.java:96)
at org.junit.runner.JUnitCore.runMainAndExit(JUnitCore.java:47)
at org.junit.runner.JUnitCore.main(JUnitCore.java:40)
FAILURES!!!
Tests run: 1, Failures: 1
이 예외는 JUnit 4.4 코어 러너를 사용하여 다음을 포함하지 않는 클래스를 실행하는 경우 발생합니다."@Test" method
자세한 내용은 링크를 참조하십시오.
customy vipin8169
제 경우 잘못된 패키지를 Import했습니다.
import org.testng.annotations.Test;
대신
import org.junit.Test;
당신의 이데올로기 자동완성에 주의하세요.
컨트롤러 테스트는 큰 숏컷으로 실시합니다.
@RunWith(SpringRunner.class)
@SpringBootTest
public class TaskControllerTest {
//...
//tests
//
}
방금 '공공'을 없앴더니 마법처럼 작동했어요
이 솔루션은 매우 적은 비율의 사람들에게 적용됩니다.일반적으로 JUnit 테스트 주자를 구현하고 별도의 ClassLoader를 사용하는 사람들입니다.
이 문제는 다른 ClassLoader에서 클래스를 로드한 후 시스템클래스 로더에서 로드된 JUnitCore 인스턴스에서 해당 테스트를 실행하려고 할 때 발생할 수 있습니다.예:
// Load class
URLClassLoader cl = new URLClassLoader(myTestUrls, null);
Class<?>[] testCls = cl.loadClass("com.gubby.MyTest");
// Run test
JUnitCore junit = new JUnitCore();
junit.run(testCls); // Throws java.lang.Exception: No runnable methods
스택 트레이스 보기:
java.lang.Exception: No runnable methods
at org.junit.runners.BlockJUnit4ClassRunner.validateInstanceMethods(BlockJUnit4ClassRunner.java:169)
at org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:104)
at org.junit.runners.ParentRunner.validate(ParentRunner.java:355)
at org.junit.runners.ParentRunner.<init>(ParentRunner.java:76)
at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:57)
at org.junit.internal.builders.JUnit4Builder.runnerForClass(JUnit4Builder.java:10)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26)
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59)
at org.junit.internal.requests.ClassRequest.getRunner(ClassRequest.java:26)
at org.junit.runner.JUnitCore.run(JUnitCore.java:138)
문제는 실제로 블록에서 발생합니다.JUnit4ClassRunner: 169(JUnit 4.11로 가정):
합니다.@Test
:
protected List<FrameworkMethod> computeTestMethods() {
return getTestClass().getAnnotatedMethods(Test.class);
}
「」는,Test.class
시스템 ClassLoader(즉, JUnitCore를 로드한 방법)가 로딩되어 있기 때문에 기술적으로 어떤 테스트 메서드에도 해당 주석이 주석을 달지 않습니다.
해결책은 테스트 자체와 동일한 ClassLoader에 JUnitCore를 로드하는 것입니다.
편집: 사용자 3486675의 질문에 대한 답변으로 시스템 클래스 로더에 위임되지 않은 ClassLoader를 작성해야 합니다.다음은 예를 제시하겠습니다.
private static final class IsolatedURLClassLoader extends URLClassLoader {
private IsolatedURLClassLoader(URL[] urls) {
// Prevent delegation to the system class loader.
super(urls, null);
}
}
필요한 모든 것을 포함한 URL 세트를 전달합니다.시스템 클래스 경로를 필터링하여 생성할 수 있습니다.이러한 클래스는 테스트클래스의 ClassLoader가 아닌 부모ClassLoader에 의해 로드되기 때문에 단순히 부모ClassLoader에 위임할 수 없습니다.
그런 다음 이 ClassLoader에 의해 로드된 클래스에서 JUnit 작업 전체를 시작해야 합니다.여기가 좀 지저분해지네요.아래에는 이런 완전 쓰레기 같은 것이 있다.
public static final class ClassLoaderIsolatedTestRunner {
public ClassLoaderIsolatedTestRunner() {
// Disallow construction at all from wrong ClassLoader
ensureLoadedInIsolatedClassLoader(this);
}
// Do not rename.
public void run_invokedReflectively(List<String> testClasses) throws BuildException {
// Make sure we are not accidentally working in the system CL
ensureLoadedInIsolatedClassLoader(this);
// Load classes
Class<?>[] classes = new Class<?>[testClasses.size()];
for (int i=0; i<testClasses.size(); i++) {
String test = testClasses.get(i);
try {
classes[i] = Class.forName(test);
} catch (ClassNotFoundException e) {
String msg = "Unable to find class file for test ["+test+"]. Make sure all " +
"tests sources are either included in this test target via a 'src' " +
"declaration.";
throw new BuildException(msg, e);
}
}
// Run
JUnitCore junit = new JUnitCore();
ensureLoadedInIsolatedClassLoader(junit);
junit.addListener(...);
junit.run(classes);
}
private static void ensureLoadedInIsolatedClassLoader(Object o) {
String objectClassLoader = o.getClass().getClassLoader().getClass().getName();
// NB: Can't do instanceof here because they are not instances of each other.
if (!objectClassLoader.equals(IsolatedURLClassLoader.class.getName())) {
throw new IllegalStateException(String.format(
"Instance of %s not loaded by a IsolatedURLClassLoader (loaded by %s)",
cls, objectClassLoader));
}
}
}
그런 다음 반사를 통해 주자를 호출해야 합니다.
Class<?> runnerClass = isolatedClassLoader.loadClass(ClassLoaderIsolatedTestRunner.class.getName());
// Invoke via reflection (List.class is OK because it just uses the string form of it)
Object runner = runnerClass.newInstance();
Method method = runner.getClass().getMethod("run_invokedReflectively", List.class);
method.invoke(...);
수입 명세서를 변경해야 했습니다.
import org.junit.jupiter.api.Test;
로.
import org.junit.Test;
이치노은 스프링 으로, 「 」가 원인입니다.@RunWith
사용한 적이 있습니다.
@RunWith(SpringRunner.class)
이 주석으로 JUnit Vintage가 실행 중인데 테스트를 찾을 수 없고 오류가 발생합니다.나는 그것을 제거했고 JUnit Jupiter만 작동하며 모든 것이 정상입니다.
에는 잘못 요.Test
★★★★★★★★★★★★★★★★★★★★★★★★★★.import org.junit.Test;
import org.junit을 사용하는 경우.jupiter.api를 클릭합니다.테스트(Junit 5)와 @RunWith(SpringRunner.class), SpringRunner가 Junit 4에 있으면 Junit이 혼란스러워집니다.Junit 5가 공개 테스트 클래스에 대해 불만을 표시하므로 클래스 이름 전에 공개를 삭제하는 것이 효과적입니다.문서에서: JUnit5는 모든 것을 공개해야 했던 JUnit4보다 테스트 클래스의 가시성에 대해 더 관대합니다.이 경우 JUnit5 테스트클래스는 가시성을 가질 수 있지만 프라이빗 패키지에서는 기본 패키지 가시성을 사용하는 것이 좋습니다.이것에 의해, 코드의 가독성이 향상됩니다.
내 경우 방금 //@RunWith(SpringRunner.class)를 비활성화했습니다.
예외는 없다
저는 교환을 하고 있습니다.import org.junit.jupiter.api.Test;
import org.junit.Test;
도움이 되었습니다.
저도 이 문제에 직면해서 같은 이유를 알 수 없었습니다.나중에 IDE를 사용한 자동 Import 문제를 발견했습니다.그것은 프로그램의 수입품입니다.
기본적으로 저는 이클립스 IDE를 사용하고 있었습니다. 제가 잘못된 ."org.junit.jupiter.api.Test"
대신 "org.junit.Test".
따라서 프로그램을 실행하기 전에 가져오기를 확인하십시오.
이것도 org를 섞으면 나올 수 있어요.junit과 org.junit.주피터 주석이 잘못 표시됩니다.
Jupiter ( 5 ) Junit Jupiter ( Junit 5 )와 Junit ( Junit 5 )를 하였습니다. JUnitCore.runClasses(classes);
후@RunWith(SpringRunner.class)
...
달리다@SpringBootTest @FixMethodOrder(MethodSorters.NAME_ASCENDING)
위의 코멘트에 기재된 바와 같이, 테스트의 문제를 해결할 수 있습니다.https://stackoverflow.com/a/59563970/13542839
자체 테스트 스위트를 올바르게 생성하지 않았기 때문에 다음 오류가 발생했습니다.
올바른 방법은 다음과 같습니다.
을 ★★★★★★★★★★★★★★★에 넣어 주세요.Foobar.java
:
public class Foobar{
public int getfifteen(){
return 15;
}
}
을 ★★★★★★★★★★★★★★★에 넣어 주세요.FoobarTest.java
:
import static org.junit.Assert.*;
import junit.framework.JUnit4TestAdapter;
import org.junit.Test;
public class FoobarTest {
@Test
public void mytest() {
Foobar f = new Foobar();
assert(15==f.getfifteen());
}
public static junit.framework.Test suite(){
return new JUnit4TestAdapter(FoobarTest.class);
}
}
.junit4-4.8.2.jar
여기 있는 걸 썼어
http://www.java2s.com/Code/Jar/j/Downloadjunit4jar.htm
컴파일:
javac -cp .:./libs/junit4-4.8.2.jar Foobar.java FoobarTest.java
실행:
el@failbox /home/el $ java -cp .:./libs/* org.junit.runner.JUnitCore FoobarTest
JUnit version 4.8.2
.
Time: 0.009
OK (1 test)
1개 테스트 통과.
하고 있는 「」를 참조해 주세요.@RunWith(Suite.class) @Suite.SuiteClasses({})
제공된 모든 클래스가 실제로 테스트 클래스인지 확인합니다.
제 경우 수업 중 하나는 테스트 수업이 아닌 실제 구현이었습니다.그냥 바보 같은 오타야.
클래스에서 @RunWith(SpringRunner.class)에 주석을 달았지만 테스트 방법이 포함되어 있지 않은 경우 이 문제에 직면합니다.해결책: 추상화하면 얻을 수 없거나 공개를 삭제하면 이 문제에 직면하지 않습니다.
에서는 ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★New > Other > JUnit > Junit Test
JUnit 3.x를 사용했기 때문인지 동일한 텍스트로 작성된 Java 클래스에서 오류가 발생했습니다.
가장 간단한 해결책은 초기화 예외가 있는 클래스에 @Test 주석 메서드를 추가하는 것입니다.
저희 프로젝트에는 초기 설정의 메인 클래스가 있습니다.@Test 메서드를 추가했는데 예외가 사라졌습니다.
프로젝트 클래스 패스에 junit jar를 수동으로 추가하여 수정할 수 있었습니다.가장 쉬운 방법은 프로젝트 루트에 /lib 디렉토리를 추가하는 것입니다.그리고 junit.jar를 /lib에 넣기만 하면 junit 테스트가 작동하기 시작합니다.
@RunWith(SpringRunner.class)에 주석을 달고 다른 testClass에 의해 확장되고 있는 부모 테스트 setUp 클래스에서도 같은 상황에 직면했습니다.setUpclass에는 테스트가 없고 Junit은 주석 @RunWith(SpringRunner.class)로 인해 테스트를 검색하려고 했지만 찾지 못하고 예외가 발생하였습니다.
No runnable methods exception in running JUnits
나는 부모님 수업을 추상적으로 만들었고 그것은 매력적으로 작용했다.
https://stackoverflow.com/a/10699141/8029525 에서 도움을 받았습니다.@froh42 도와줘서 고마워요.
를 Import 하면, 솔루션은 간단합니다.
import org.junit.Test;
너는 Junit 4로 뛰어야 한다.
오른쪽 클릭 -> 실행 as-> 테스트 설정 -> 테스트 러너 -> 를 junit 4 로 합니다.
저는 이렇게 덧붙인다.JUnit4.12
★★★★★★★★★★★★★★★★★」Hamcrest1.3
import org.testng.annotations.Test;
★★★★★★★★★★★★★★★★★」import org.testng.annotations.*;
로로 합니다.import org.junit.Test;
★★★★★★★★★★★★★★★★★★★!
경험상으로는 스프링 부츠 프로젝트를 진행하고 있는데 JUnit Vintage와 함께 JUnit Jupiter 테스트를 받고 있었습니다.JUnit Vintage는 실패하여 퍼블릭 액세스 수식어를 삭제하자 Junit Vintage 테스트가 사라졌고 결과적으로 원하는 동작을 달성했습니다.
@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles(profiles = {"test"})
public class TestSuiteName {
||
@RunWith(SpringRunner.class)
@SpringBootTest
@ActiveProfiles(profiles = {"test"})
class TestSuiteName {
인텔리J에서 Test Case를 실행할 때 JUnit Zupiter와 JUnit Vintage가 분리된 이유는 무엇입니까?
있다면 pom.xml에서 꺼내세요.
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
이 test-case-method에 액세스 수식 public을 추가하지 않은 경우에도 같은 오류가 발생하였습니다.JUnit 4를 썼어요.Junit 5의 경우 test-case-method에 대한 액세스 지정자를 사용하지 않고 동일한 테스트케이스가 동작합니다.
이것을 Junit5에서 실행해 보았습니다.
@SpringBootTest(classes = {ServletWebServerFactoryAutoConfiguration.class},
webEnvironment = RANDOM_PORT,
properties = {"spring.cloud.config.enabled=false"})
@ExtendWith(MockitoExtension.class)
@AutoConfigureMockMvc
언급URL : https://stackoverflow.com/questions/24319697/java-lang-exception-no-runnable-methods-exception-in-running-junits
'programing' 카테고리의 다른 글
Python 3 회전 범위를 목록으로 설정 (0) | 2022.10.11 |
---|---|
C에서 C++를 우아하게 호출하다 (0) | 2022.10.11 |
문자열을 대문자로 변경하는 방법 (0) | 2022.10.11 |
컬렉션에서 최대값을 얻는 방법(예를 들어 Array List) (0) | 2022.10.11 |
문자열에서 모든 공백을 제거하는 방법 (0) | 2022.10.11 |