【发布时间】:2016-11-18 16:05:36
【问题描述】:
我是 JUnit 新手,不知道哪些方法应该有测试,哪些不应该。举个例子:
public List<Site> getSites(String user)
{
SiteDao dao = new SiteDaoImpl();
List<Site> siteList = new ArrayList<Site>();
ServiceRequest rq = new ServiceRequest();
rq.setUser(user);
try
{
ServiceResponse response = siteDAO.getReponse(rq);
List<String> siteNums = response.getSiteNums();
if (siteNums != null && !siteNums.isEmpty())
{
List<DbModelSite> siteInfo = dao.getSiteInfo(siteNums);
if (siteInfo != null && !siteInfo.isEmpty())
{
siteList = SiteMapper.mapSites(siteInfo);
}
}
}
catch (Exception e)
{
e.printStackTrace();
}
return siteList;
}
public static List<Site> mapSites(List<DbModelSite> siteInfo)
{
List<Site> siteList = null;
if (siteInfo != null && !siteInfo.isEmpty())
{
siteList = new ArrayList<Site>();
for (DbModelSite temp : siteInfo)
{
Site currSite = mapSite(temp);
siteList.add(currSite);
}
}
return siteList;
}
public static Site mapSite(DbModelSite site)
{
Site mappedSite = null;
if (site != null)
{
mappedSite = new Site();
mappedSite.setSiteNum(site.getSiteNum());
mappedSite.setSpace(site.getSpace());
mappedSite.setIndicator("Y");
}
return mappedSite;
}
为mapSites() 和mapSite() 方法进行单元测试是非常简单的,但我遇到问题的地方是getSites() 方法。对这种方法进行单元测试有意义吗?如果是这样,我将如何去做?似乎这需要大量的模拟,而且由于我对 JUnit 还很陌生,所以我无法弄清楚如何模拟所有这些对象。
所以我的问题实际上是两个方面:
- 如何确定一个方法是否需要进行单元测试?
- 如何对需要大量模拟的复杂方法进行单元测试?
【问题讨论】:
-
是的,它也应该进行单元测试,理想情况下,至少所有
public方法都应该进行单元测试,因为它们以某种方式定义了您的应用程序的合同
标签: java unit-testing junit mocking mockito