Java 简单Mockito测试(Spring+;Dao)
我非常沮丧,因为我无法理解这一点。我已经阅读了数百万篇文章,但对于如何做到这一点,没有什么是明确的。我试着写一个Mockito测试只是为了练习 我有一个SpringJava应用程序,它从数据库中获取数据 这是applicationContext.xmlJava 简单Mockito测试(Spring+;Dao),java,spring,mockito,Java,Spring,Mockito,我非常沮丧,因为我无法理解这一点。我已经阅读了数百万篇文章,但对于如何做到这一点,没有什么是明确的。我试着写一个Mockito测试只是为了练习 我有一个SpringJava应用程序,它从数据库中获取数据 这是applicationContext.xml <bean id="Lookup" class="com.gd.test.Lookup"> <property name="AssetClassDao" ref="assetClass" /> </bean&
<bean id="Lookup" class="com.gd.test.Lookup">
<property name="AssetClassDao" ref="assetClass" />
</bean>
<bean id="assetClass" class="com.gd.impl.AssetClassImpl">
<property name="dataSource" ref="dataSource" />
</bean>
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="org.apache.commons.dbcp.BasicDataSource" />
<property name="url"
value="jdbc:sqlserver://ip:port;databaseName=test" />
<property name="username" value="user" />
<property name="password" value="pass" />
</bean>
AssetClassImpl.java
public class AssetClassImpl implements AssetClassDao {
private DataSource dataSource;
AssetClass ac = new AssetClass();
@Override
public AssetClass getAssetDataById(int id) {
String sql = "select id, name from TABLE where id="
+ String.valueOf(id);
Connection conn = null;
try {
conn = dataSource.getConnection();
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery();
while (rs.next()) {
ac.setASSET_CLASS_ID(rs.getString("id"));
ac.setASSET_CLASS_NAME(rs.getString("name"));
}
rs.close();
ps.close();
return ac;
} catch (SQLException e) {
e.printStackTrace();
}
return ac;
}
public DataSource getDataSource() {
return dataSource;
}
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
}
Lookup.java
public class Lookup {
private AssetClassDao assetClassDao;
public void runNameLookup() throws IOException {
AssetClass byOne = assetClassDao.getAssetDataById(5);
System.out.println(byOne.toString());
}
public AssetClassDao getAssetClassDao() {
return assetClassDao;
}
public void setAssetClassDao(AssetClassDao assetClassDao) {
this.assetClassDao = assetClassDao;
}
}
查询返回“5”作为ID,“Mortgage”作为名称。
对于我用Mockito编写的测试,它如何知道使用哪个实现
我的测试:
public class TestLookup {
@Mock
private AssetClassDao acd;
@Mock
private Lookup al;
@Mock
private AssetClass ac;
@Before
public void setupMock(){
MockitoAnnotations.initMocks(this);
acd = mock(AssetClassImpl.class);
}
@Test
public void testDataById(){
when(acd.getAssetDataById(5)).thenReturn(ac);
System.out.println(acd.getAssetDataById(5).getNAME());
}
}
如何正确测试这些值 通过编写以下语句,您正在创建一个新的类对象
AssetClass
:
AssetClass ac = new AssetClass();
如果您使用的是Spring,则应将其作为依赖项之一注入,如下所示:
@Autowired
private AssetClass ac;
现在,您可以通过在测试类中编写以下内容来模拟此依赖关系:
@Mock
private AssetClass ac;
此外,您还必须模拟其他依赖项,如数据源
、连接
等,并执行以下操作:
@Mock
private DataSource dataSource;
@Mock
private Connection conn;
...
Mockito.when(dataSource.getConnection()).thenReturn(conn);
我希望这将为您提供一些Mockito的精髓以及如何使用它。我不知道我还必须模拟数据源和连接。。。我会努力的now@gd000除了
AssetClass
之外,您还应该模拟DataSource
、Connection
、PreparedStatement
和ResultSet
。
@Mock
private DataSource dataSource;
@Mock
private Connection conn;
...
Mockito.when(dataSource.getConnection()).thenReturn(conn);