(原谅我选择的用语 - 我对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构建却没有?我已经确认了两种操作系统的测试运行。
潜在的重要说明:
WsdlProjectRunner
针对Spring运行SoapUI测试@PrepareForTest({..., MyDbConnector.class, ...})
我补充说:
@PrepareForTest({..., MyDbConnector.class, ClassThatUsesMyDbConnector.class, ...})
这解决了我们的问题,但没有回答这个问题,所以我会把它打开。