为什么Windows和Linux机器以不同的方式处理Spring应用程序集成测试?

时间:2015-09-08 15:41:30

标签: java spring maven integration-testing

(原谅我选择的用语 - 我对Java / Spring / PowerMock / SoapUI缺乏经验。)

我做了一个代码更改导致数据库调用,现在我在Spring应用程序周围进行了失败的集成测试。结构类似于:

// Integration tests class
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = MyConfigurationClass.class)
@WebIntegrationTest
@PrepareForTest({..., MyDbConnector.class, ...})   // MyDbConnector is a wrapper around JdbcTemplate

...

@Rule
public PowerMockRule powerMockRule = new PowerMockRule();

@Rule
public ExpectedException expectedException = ExpectedException.none();

...

@Before
public void setUp() {
    ...
    whenNew(MyDbConnector.class).withNoArguments().thenReturn(mock(MyDbConnector.class));
    ...
}

// MyConfigurationClass.java
@SpringBootApplication
@ComponentScan(basePackages = ...,
    excludeFilters = {
        @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = someClass.class),
        @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE, value = someOtherClass.class)
    }
)
public final class MyConfigurationClass {}

在我更改之前,构建在Linux和Windows上成功运行。 更改后,构建在Windows上成功运行,但在Linux上失败。 Linux上的构建似乎试图通过调用MyDbConnector中的方法来连接到数据库,但无法执行SQL查询。由于MyDbConnector应该被嘲笑,它甚至不应该进入真正的方法。

为什么Windows maven构建(似乎)成功模拟MyDbConnector,而Linux maven构建却没有?我已经确认了两种操作系统的测试运行。

潜在的重要说明:

  • 我有两个集成测试类,一个只针对Spring进行测试,另一个使用WsdlProjectRunner针对Spring运行SoapUI测试
  • 我尝试在两台不同的Linux机器上构建。在一台机器上,只有SoapUI测试失败,但在另一台机器上,SoapUI和非SoapUI测试失败。
编辑:在同事的帮助下,而不是:

@PrepareForTest({..., MyDbConnector.class, ...})

我补充说:

@PrepareForTest({..., MyDbConnector.class, ClassThatUsesMyDbConnector.class, ...})

这解决了我们的问题,但没有回答这个问题,所以我会把它打开。

0 个答案:

没有答案