gpt4 book ai didi

java - 如何对调用另一个方法的方法进行单元测试?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:25:20 24 4
gpt4 key购买 nike

如何测试调用另一个方法的方法?在我的示例中,我想知道如何测试调用 create 方法的 initComponentsTypeA

public MyClass{

private List<TypeA> componentsTypeA;

public void initComponents(Config c){
componentsTypeA = initComponentsTypeA(c);
//...
}

private List<TypeA> initComponentsTypeA(Config c){
//...
List<MyObject> someList = c.getSomeList();
List<TypeA> localList = new ArrayList<>();
for(MyObject mo : someList){
localList.add(create(mo));
}
return localList;
}

private TypeA create(MyObject myObject){
// ...
}
}

我知道一种解决方案是以这种方式重构代码(如下所示)。但有必要吗?这是唯一的解决方案吗?

public MyClass{

private List<TypeA> componentsTypeA;

public void initComponents(Config c){
List<MyObject> myObjectList = initComponentsTypeA(c);
componentsTypeA = create(myObjectList)
//...
}

private List<MyObject> initComponentsTypeA(Config c){
//...
List<MyObject> someList = c.getSomeList();
return someList;
}

private List<TypeA> create(List<MyObject> myObjectList){
// ...
}
}

在第二个重构示例中,方法的名称也应根据其含义进行更改。

最佳答案

您可以使用 mockito 并创建一个返回真实方法的模拟,然后覆盖您想要模拟的方法的行为,或者使用 spy,它创建一个模拟来包装真实的实例你的对象。

这是关于 mockito spy 的教程.

编辑:

由于要模拟的方法是私有(private)的,并且如@fge 所述,您需要公开私有(private)方法的模拟库。和 powermock , 就是这样做的。

关于java - 如何对调用另一个方法的方法进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22312541/

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