我们不生产代码,但我们是bug的专业制造者

Hybris中进行单元测试步骤

1.将impl写在一堆的xxxModel抽到dao层中

如在YeTmallOrderDaoImpl中定义了ECTmallTradeModel的方法,这样的编程写法不归范,引用会很混乱,为了让代码的用途功能看的更加清晰明了,每个model的方法都应该各自抽到对应的dao层中,然后另外在impl层实现。所以要在到中新建YeETmallTradeDao,然后把这个方法搬过去

2.在impl中实现dao层抽出来的方法

在YeETmallTradeDao中我们新建

1
List<ECTmallTradeModel> findBy(String type,String seller_nick,PageableData pageableData);

接口
在Intellij Idea中在点中接口按alt+enter键即可以自动在impl中生成相应的实现类。

  • 注意别忘了在spring——xxx.bean中配置相应的dao的bean id。在idea中配好了会有一个像绿色叶子一样的东西。

    3.对实现类进行junit测试

    1.新建junit测试

    点中impl中的实现类按alt+enter键选中create test来在对应的testsrc中对应的包建立相应的测试类,以xxxDaoTests结尾。

    2.测试类的编写

  • 自动生成测试方法后一定不要忘记使用@Resource引入测试的dao的bean id,然后引入modelService方法来对modle进行“造数据”,即先用
    1
    model=modelService.create(xxxModel.class);

来实例化一个model而不是用xxxModel model=new xxxModel();来进行相应的实例化。

  • 然后model.set()方法进行数据的制造。
  • 最后进行
    1
    modelService.save(model)或model.saveAll(model1,model2)

来对Model的数据进行保存,因为要测得数据偏多,所以造数据的方法要放在@Before方法中。注意:自己造的数据并不可以在数据库中查询得到(因为有事件回滚操作)。

  • 测试数据的方法一般用断言:常用的有
  • assertTrue(boolean);传入一个为布尔值的条件,如assertTrue(!result.isEmpty());
  • assetNotNull(params);传入一个变量,判断是否为空
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package com.yinger.dao;
import com.yinger.model.ECTmallTradeModel;
import de.hybris.bootstrap.annotations.IntegrationTest;
import de.hybris.platform.commerceservices.search.pagedata.PageableData;
import de.hybris.platform.servicelayer.ServicelayerTransactionalTest;
import de.hybris.platform.servicelayer.model.ModelService;
import org.junit.Before;
import org.junit.Test;
import javax.annotation.Resource;
import java.util.List;
import static org.jgroups.util.Util.assertTrue;
/**
* @author huangsonglin
* @version 1.0
* @since JDK1.8
*/
@IntegrationTest
public class YeECTmallTradeDaoTests extends ServicelayerTransactionalTest {
@Resource(name = "yeECTmallTradeDao")
//引入的bean的id名字
private YeECTmallTradeDao ecTmallTradeDao;
@Resource
private ModelService modelService;
//引入modelService进行model的实例化,造数据
private ECTmallTradeModel model;
private int result = 11;
private boolean flag = false;
@Before
public void setUp() throws Exception {
model = modelService.create(ECTmallTradeModel.class);
model.setTid("111");
model.setType("buyer");
model.setFirstOrSecond("first");
model.setSellerNick("hsl");
modelService.save(model);
}
@Test
public void findBy() throws Exception {
PageableData pageableData = new PageableData();
pageableData.setCurrentPage(1);
pageableData.setPageSize(20);
pageableData.setSort("hh");
List<ECTmallTradeModel> results = ecTmallTradeDao.findBy("buyer", "hsl", pageableData);
assertTrue(!results.isEmpty());
}
@Test
public void findByTypeAndSellerNick() throws Exception {
result = ecTmallTradeDao.findByTypeAndSellerNick("buyer", "hsl");
assertTrue(result != 11);
}
@Test
public void findByTid() throws Exception {
flag = ecTmallTradeDao.findByTid("111");
assertTrue(flag);
}
}

4.进行junit测试

1
ant all integrationtests -Dtestclasses.extensions=djcore

用于对某个拓展中的所有测试类都进行测试,这样效率高,一次性大酬宾。

项目中学到的东西

  1. 1. 1.将impl写在一堆的xxxModel抽到dao层中
  2. 2. 2.在impl中实现dao层抽出来的方法
  3. 3. 3.对实现类进行junit测试
    1. 3.1. 1.新建junit测试
    2. 3.2. 2.测试类的编写
  4. 4. 4.进行junit测试