gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-11-01 03:47:52 24 4
gpt4 key购买 nike

我正在研究一种方法,它可以被认为是另一种已经定义和测试的方法的专门化。下面是一个示例代码来说明:

public class ProductService {

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

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

}

我不想复制我对 addProduct 的测试,它们已经非常复杂了。我想要的是,当我为 addSpecialProduct 定义测试时,我只是确保它在此过程中也调用了 addProduct。如果这是 2 个类协作的问题,则很容易模拟协作者并验证是否调用了目标方法(并在必要时 stub )。但是,这 2 个方法属于同一个类。

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

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

但是,我想知道这种方法是否以某种方式违背了单元测试的目的。对此事的普遍共识是什么?

最佳答案

我认为这取决于您希望单元测试的严格程度。在极端意义上,单元测试应该只测试行为,而不是实现。这意味着您将需要复制您的测试(或采纳@chrylis 的建议,将通用功能抽象给助手)。确保调用另一个方法是测试实现。

但实际上,我认为您监视实例以确保调用其他经过良好测试的方法的想法是个好主意。以下是我的理由:

1) 它简化了您的代码。

2) 我立即清楚发生了什么。它对我说,已经为其他方法测试过的所有内容现在也都为真,这里是额外的断言。

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

关于java - 如何测试依赖于另一个已经测试过的方法的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39100785/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com