Я применяю шпионскую аннотацию вместе с PowerMock и InjectMocks. Когда я выполняю метод одиночного теста, он не выдаст никакой ошибки, но когда я выполню полный файл теста, ошибка вернется.
Если я выполню метод фокусного теста, ONDBConnectionPool.getDataSource () будет работать как UnitTestDbConnection. getDataSource (), но когда я запускаю полный тестовый файл, ONDBConnectionPool.getDataSource () будет использовать реальный метод.
Могу ли я знать, что кто-нибудь сталкивался с подобной проблемой раньше?
Мой код, как показано ниже:
@RunWith(PowerMockRunner.class)
@PrepareForTest({DBConnectionPool.class})
@PowerMockIgnore("javax.management.*")
public class TestAbcController {
private static final Logger logger = Logger.getLogger(TestAbcController .class.getName());
public TestAbcController () {
}
@Spy
private SampleDao mockDao = new SampleDao();
@InjectMocks
private AbcController ctr;
private BasicDataSource ds = null;
private MockMvc mockMvc;
@BeforeClass
public static void setUpClass() {
logger.setLevel(Level.INFO);
PowerMockito.mockStatic(DBConnectionPool.class);
PowerMockito.when(DBConnectionPool.getDataSource()).thenReturn(UnitTestDbConnection.getDataSource());
}
@Test
public void test1() {
when(mockDao.getMap()).thenReturn(new HashMap());
}
@Test
public void test2() {
when(mockDao.getMap()).thenReturn(new HashMap());
}
SampleDao. java
public class SampleDao {
protected DataSource getDataSource() {
return ONDBConnectionPool.getDataSource();
}
public SampleDao() {
jdbcTemplate = new JdbcTemplate(getDataSource());
}
protected JdbcTemplate jdbcTemplate;
}