加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 如何测试依赖于另一个已测试方法的方法?

发布时间:2020-12-15 02:16:21 所属栏目:Java 来源:网络整理
导读:我正在研究一种方法,可以将其视为另一种已定义和测试的方法的特化.这是一个示例代码来说明: public class ProductService { public void addProduct(Product product) { //do something } public void addSpecialProduct(Product product) { addProduct(pro
我正在研究一种方法,可以将其视为另一种已定义和测试的方法的特化.这是一个示例代码来说明:

public class ProductService {

    public void addProduct(Product product) {
        //do something
    }

    public void addSpecialProduct(Product product) {
        addProduct(product);
        //do something after
    }

}

我不想复制我对addProduct的测试,这些测试已经非常复杂了.我想要的是当我为addSpecialProduct定义测试时,我只是确保它也在进程中调用addProduct.如果这是2个类协作的问题,那么很容易让协作者进行模拟并且只是验证目标方法是否被调用(并在必要时存根).但是,这两种方法属于同一类.

我现在想的是监视我正在测试的对象,例如:

public void testAddSpecialProduct() {
    //set up code
    ProductService service = spy(new DefaultProductService());    
    service.addSpecialProduct(specialProduct);
    verify(service).addProduct(specialProduct);
    //more tests
}

但是,我想知道这种方法是否会以某种方式违背单元测试的目的.关于这件事的一般共识是什么?

解决方法

我认为这取决于您希望单元测试的严谨程度.在极端意义上,单元测试应该只测试行为,而不是实现.这意味着你需要复制你的测试(或者采取@chrylis的建议,将常用功能抽象给帮助者).确保调用其他方法是测试实现.

但实际上,我认为你在实例上监视间谍以确保调用其他经过良好测试的方法的想法是个好主意.这是我的理由:

1)它简化了您的代码.

2)我立即清楚地知道发生了什么.它告诉我,为其他方法测试的所有东西现在也都是真的,这里是额外的断言.

有一天,您可以修改实现,以便不调用其他方法,这将导致您的单元测试失败,这是人们通常试图通过不测试实现来避免的.但根据我的经验,当行为发生变化时,这样的变化会更加常见.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读