0

我发现当使用和在内存数据库中运行多个gmock测试时,我收到有关表已经存在的错误。它似乎多次运行 spring 上下文创建,即使它在给定的测试类中只设置一次作为所有测试方法使用的字段。

理想情况下,我希望多个类重用相同的上下文,但即使是具有单个 GMockTestCase 的多个方法也正在重新创建弹簧上下文。

覆盖 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 {
4

2 回答 2

1

@BeforeClass 将允许您为每个类构建一个上下文

于 2011-11-11T01:41:54.727 回答
0

你可以用这个

@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();
}

你可以多次使用它们。

于 2013-12-05T14:19:34.673 回答