Eclipse выбрасывает java.lang.NullPointerException при запуске Spring JUnit
Когда я запускаю свой тест junit, консоль напечатает этот Excetchion:
java.lang.NullPointerException
at org.eclipse.jdt.internal.junit4.runner.SubForestFilter.shouldRun(SubForestFilter.java:81)
at org.junit.internal.runners.JUnit4ClassRunner.filter(JUnit4ClassRunner.java:110)
at org.junit.runner.manipulation.Filter.apply(Filter.java:47)
at org.junit.internal.requests.FilterRequest.getRunner(FilterRequest.java:34)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createFilteredTest(JUnit4TestLoader.java:77)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:68)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:43)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:444)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
И базовый тестовый объект, подобный этому
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
"classpath*:config/spring/appcontext-*.xml",
"classpath*:config/sqlmap/*.xml"
})
@TransactionConfiguration(defaultRollback = false)
@Transactional
public abstract class AbstractTestObject {
static {
//DOMConfigurator.configure("target/classes/log/log4j.xml");
}
}
И метод JUnit:
public class StaffInfoServiceImplTest extends AbstractTestObject{
@Autowired
StaffInfoServiceImpl service;
@Test
public void insertTest() {
StaffInfo bo = new StaffInfo();
bo.setEmail("[email protected]");
bo.setEntId(1);
bo.setEntStaffNum("000XXXX");
bo.setName("julia");
bo.setPhone("00000000");
bo.setSerialNum("SD12233KSRONDU189342ND");
bo.setSuperior(2321);
bo.setDepartment("Sale");
bo.setSingleCredit(BigDecimal.valueOf(100));
bo.setMonthlyCredit(BigDecimal.valueOf(10000));
SLTContext c = new SLTContext();
c.setOperator("0000001");
service.insertStaffInfo(bo, c);
}
}
Мой проект - проект Java EE, используя maven для управления lib, используя spring управлять beans.
Моя среда разработки:
Mac OS X Yosetime 10.10.4
Eclipse Java EE IDE для веб-разработчиков (версия: Mars Release (4.5.0))
Плагин Maven (установить с Eclipse- > Установить новое программное обеспечение)
Я предполагаю, что это конфликт между eclipse junit и конфигурацией junit проекта, но я не уверен.
Как решить проблему, спасибо.
Ответы
Ответ 1
При выполнении (одиночных) тестов JUnit перешел через один и тот же NPE на Eclipse Mars.
Я попытался создать совершенно новое рабочее пространство и добавил несколько тестовых классов + методы тестирования, но использовал библиотеку JUnit, поставляемую с Eclipse Mars (версия 4.12). С помощью этой библиотеки я мог бы выполнить все тесты на Марсе.
В другой рабочей области/проекте, где у меня была проблема, прежде чем я использую более старую версию JUnit.
Я думаю, что эта старая версия JUnit является проблемой, ей придется перейти на более новую версию.
Ответ 2
Угу. Я поднял ошибку против Eclipse, и они посоветовали изменить мою зависимость на более новую версию JUnit.
Я пошел от JUnit 4.4 до JUnit 4.9, и он снова начал работать.
Ответ 3
Сделайте это:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/applicationContext.xml")
@WebAppConfiguration
public class StaffInfoServiceImplTest { ..Your Code.. }