我有一些基础测试类,它们使用测试执行监听器为spring,logging,jndi等设置常用配置,然后由子类继承。这样做就可以运行代码,而不必担心在运行测试代码之前获取jndi和日志服务。
使用intellij并从项目库调用“运行所有测试”,IDE尝试将基本测试类作为单元测试运行,并为我提供“无可运行方法”错误。
我知道我可以在基类中放置一个空的runnable方法,但我希望有一个人有更好的想法。
基类是:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
"classpath:spring-jndi.xml"
})
@TestExecutionListeners({
Log4JSetupListener.class,
JndiSetupListener.class,
DependencyInjectionTestExecutionListener.class,
DirtiesContextTestExecutionListener.class,
TransactionalTestExecutionListener.class
})
public class SpringAppTestCase extends Assert implements ApplicationContextAware {
protected JndiTemplate jndiTemplate = new JndiTemplate();
@Autowired
protected JdbcTemplate jdbcTemplate;
protected ApplicationContext applicationContext;
public void setApplicationContext(ApplicationContext ac) {
this.applicationContext = ac;
}
//
// @Test
// public void doit(){
// // this would prevent blow up but
// all subclass tests would run an extra method
// }
protected Logger log = Logger.getLogger(getClass().getName());
}
错误:
java.lang.Exception: No runnable methods
at org.junit.internal.runners.MethodValidator.validateInstanceMethods(MethodValidator.java:32)
at org.junit.internal.runners.MethodValidator.validateMethodsForDefaultRunner(MethodValidator.java:43)
at org.junit.internal.runners.JUnit4ClassRunner.validate(JUnit4ClassRunner.java:36)
at org.junit.internal.runners.JUnit4ClassRunner.<init>(JUnit4ClassRunner.java:27)
at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<init>(SpringJUnit4ClassRunner.java:76)
答案 0 :(得分:62)
制作父类abstract
或重命名,例如它不会以Test
或TestCase
结尾。
答案 1 :(得分:3)
我有同样的问题。我没有使用Test方法进行测试。
@Test
public void setupTest() {
}
上述方法解决了这个问题。
答案 2 :(得分:3)
确保@Test批注导入为org.junit.Test,而不是here作为评论的杜松之类的东西对我有用。希望将其添加为答案,以便其他人可以看到
答案 3 :(得分:1)
我遇到了同样的问题,但是我没有类继承,并且存在@Test
注释。问题是我的测试课是公开的,我删除了public
修饰符,并且问题已解决。
答案 4 :(得分:0)
您要确保没有从 Jupiter 导入 @Test,混合 JUnit 4 和 JUnit 5 会导致相同的问题。我为 SpringRunner 导入了正确的 JUnit,问题解决了