Как я могу протестировать старое приложение Spring 2.0.7 с помощью JUnit?

У меня есть старое приложение, созданное с помощью древней версии Spring: 2.0.7. Мне было поручено добавить новые функции в это приложение, поэтому я также должен написать несколько тестов JUnit.

До сих пор я написал макеты классов для своих услуг, и applicationContext-test.xml файл помещен под src/test/resources/, Как правило, следующим шагом будет написать мой тестовый пример следующим образом:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/applicationContext-test.xml"})
public class MyTestCase {
    ...
}

Но, как я прочитал, Spring TestContext Framework был впервые представлен в Spring 2.5, и поэтому он мне недоступен.

Есть ли другой способ, которым я могу загрузить файл applicationContext.xml в JUnit и получить доступ к bean-компонентам, определенным в этом XML-файле?

Поскольку у меня уже есть макеты, и они не требуют параметров инициализации, я мог бы просто создать их экземпляр и передать их установщику, возможно, используя @BeforeClass аннотаций. Но я бы предпочел использовать контекст Spring, если это возможно, учитывая, что у меня появился какой- то необычный способ загрузки bean-компонентов, и его тоже нужно протестировать...

1 ответ

Решение

Я закончил писать обертку ApplicationContext и вызывал init метод себя с @Before аннотации, вместо того чтобы полагаться на Spring, чтобы сделать это. Таким образом, я могу проверить свой метод инициализации, как если бы он был вызван из Spring.

public class ApplicationContextMock implements ApplicationContext {
    private Map<String, Object> beans;

    public ApplicationContextMock() {
        beans = new HashMap<String, Object>();
        beans.put("child1", new SomeServiceMock());
        beans.put("child2", new AnotherServiceMock());
    }

    public Object getBean(String arg0) throws BeansException {
        return beans.get(arg0);
    }
    // ...
}
@RunWith(JUnit4.class)
public class MyTestCase {
    MyClass foo;

    @Before
    public void init() {
        foo = new MyClass();
        foo.loadChildren(new ApplicationContextMock());
    }

    // ...
}

(Я все еще хочу знать, есть ли лучший способ сделать это без аннотаций Spring 2.5+).

Другие вопросы по тегам