it-roy-ru.com

Eclipse выдает исключение Java.lang.NullPointerException при запуске Spring JUnit

Когда я запускаю свой тест junit, консоль распечатывает это исключение:

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, использующий bean-компоненты Spring.

Моя среда разработки:
Mac OS X Yosetime 10.10.4
Eclipse Java EE IDE для веб-разработчиков (версия: Mars Release (4.5.0))
Плагин Maven (установить из Eclipse-> Install New Software)

Я предполагаю, что это конфликт между Eclipse junit и config junit проекта, но я не уверен.

Как решить проблему, спасибо.

16
kiwi

Наткнулся на тот же NPE на Eclipse Mars при выполнении (одиночных) тестов JUnit.

Я попытался создать совершенно новое рабочее пространство и добавил несколько тестовых классов + методы тестирования, но использовал библиотеку JUnit, поставляемую с Eclipse Mars (версия 4.12). С помощью этой библиотеки я мог выполнить все тесты из Марса.

В другой рабочей области/проекте, где у меня была проблема, прежде чем я использую более старую версию JUnit.

Я думаю, что эта старая версия JUnit является проблемой, придется обновить до более новой версии.

12
Maximilian Petkov

Ага. Я поднял ошибку в Eclipse, и они посоветовали изменить мою зависимость на более новую версию JUnit.

Я перешел с JUnit 4.4 на JUnit 4.9, и он снова начал работать.

4
cs94njw

Сделай это : 

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/applicationContext.xml")
@WebAppConfiguration
public class StaffInfoServiceImplTest { ..Your Code.. }
0
Satyaki