Используя GMock с Spring, как настроить контекст Spring только один раз для нескольких тестов? - PullRequest
0 голосов
/ 12 октября 2011

Я обнаружил, что при выполнении нескольких gmock тестов с использованием базы данных и в памяти я получаю ошибки о том, что таблица уже существует. Кажется, что он запускает создание контекста Spring несколько раз, даже если он задан только один раз в данном классе теста как поле, которое будет использоваться всеми методами теста.

В идеале я хотел бы, чтобы несколько классов повторно использовали один и тот же контекст, но даже несколько методов с одним GMockTestCase заново создают контекст Spring.

Переопределение метода установки Junit не помогает.

Я считаю это поведение не интуитивным и неправильным, но, вероятно, есть кое-что, что я не понимаю о том, как gmock или groovy работает

class MyTest extends GMockTestCase {

ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:spring.test.xml")

def mockRequest = mock(RenderRequest)
def mockResponse = mock(RenderResponse)

void testHandleRequest() {

    mockRequest.getAttribute('javax.portlet.userinfo').returns(userInfo)
    mockRequest.getRemoteUser().returns(userName)

    play {
        def mav = mainController.handleRenderRequestInternal(mockRequest, mockResponse)
        assertEquals userName, mav.model.un

Единственный обходной путь, который я могу использовать на данный момент, но не идеальный, - это использовать аннотированную технику и расширить класс пружинных испытаний следующим образом:

@WithGMock
@ContextConfiguration(locations = ["classpath:spring.dev.xml"])
class MyTest extends AbstractTransactionalJUnit4SpringContextTests {

Ответы [ 2 ]

1 голос
/ 11 ноября 2011

@ BeforeClass позволит вам создать один контекст для класса

0 голосов
/ 05 декабря 2013

вы можете использовать это

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"file:src/main/webapp/WEB-INF/kontakteTest-portlet.xml"})
@TestExecutionListeners(value = {DependencyInjectionTestExecutionListener.class})
MockActionRequest request;
MockActionResponse response;

@Before
public final void init() {
    request = new MockActionRequest();
    response = new MockActionResponse();
}

и вы можете использовать их много раз.

...