Запустите метод фокусировки без проблем, но проблема с полным тестом случится - PullRequest
0 голосов
/ 10 января 2020

Я применяю шпионскую аннотацию вместе с 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;
}
...