2017-04-05 29 views
0

を呼び出していますので、私はこの問題を一日中解決しています。Jmockit/Springのmocked依存関係は、依然としてReal依存関係

私はSpring 3.2でJdbcSupportDao型のクラスをテストしています。この問題は、コードを読んだだけではわかりやすくなりますが、簡単に要約します。

JdbcTemplateで@Mockedアノテーションを使用して、データベースのクエリを模擬します。問題は、Expectationsブロックを書いた後、実際のJdbcTemplateメソッドがまだ呼び出されており、JMockitは明らかに式に入りません。

次ユニットテストが失敗した:

/*@RunWith(SpringJUnit4ClassRunner.class)*/ 
@RunWith(JMockit.class) 
@ContextConfiguration(locations={"classpath:studentAggregateReport-servlet.xml", "classpath:applicationContext-hibernate.xml"}) 
public class JdbcSSODaoTest extends AbstractTransactionalJUnit4SpringContextTests { 

    @Mocked 
    JdbcTemplate jdbcTemplate; 

    List<String> unameList; 


    SSODao ssoDao; 

    String DUMMY_ALCID = "yattayattayatta"; 

    @Before 
    public void constructDao() { 
     this.ssoDao = new JdbcSSODao(); 
     ((JdbcSSODao) ssoDao).setJdbcTemplate(jdbcTemplate); 
    } 

    @Test 
    public void testGetUnameFromAlcId() { 
     unameList = new ArrayList<String>() {{ 
      add("PEEPEE"); 
     }}; 
     //((JdbcSSODao) ssoDao).setJdbcTemplate(jdbcTemplate); 
     new Expectations() {{ 
      jdbcTemplate.query(anyString, (ResultSetExtractor<String>)any); result = unameList; 
     }}; 

     String uname = ssoDao.getUnameFromAlcId(DUMMY_ALCID); 

     assertNotNull(uname); 
    } 

} 

、ここではテストされているクラスのコードです:

public class JdbcSSODao extends JdbcDaoSupport implements SSODao { 

    @Override 
    public String getUnameFromAlcId(String alcid) { 
     String sql = SSOSqlUtil.createGetUnameByAlcIdSql(alcid); 
     logger.debug(sql); 
     List<String> resultLst = getJdbcTemplate().query(sql, new RowMapper<String>() { 
      public String mapRow(ResultSet rs, int rowNum) throws SQLException { 
       return rs.getString(1); 
      } 
     }); 
     if(resultLst.isEmpty()) return null; 
     return resultLst.get(0); 
    } 

} 

神の:(

答えて

0

甘い母を助けてください..

明らかに、モックされたメソッドのパラメータをthで使用されている型にキャストする必要がありますeコール。これは私のためにそれを修正した:

new Expectations() {{ 
     jdbcTemplate.query(anyString, (RowMapper<String>)any); result = unameList; 
    }};