gpt4 book ai didi

java - 除了在 mockito 中手动设置值之外,还有其他方法可以模拟 pojo 吗?

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

考虑一个方法在我的服务中返回类 A,

public List<A> method(){
A a=B.method_b();
List<A> list=new ArrayList<>();
for(A aa:a){
A classA=new A();
classA.setVal1(aa.getVal1());
list.add(classA);
}
return list;
}

我的 pojo 类

class A{
private int val1;
private int val2;
.
.
.
.
private int val10;
//setter and getter
}

所以在测试用例中,我写成

@Mock
B b;
@Test
public void check(){
Mockito.when(b.method_b())
.thenReturn(return_A());
}
private A return_A(){
A a=new A();
a.setVal1(1);
.
.
.
a.setVal10(10);
}

这里一切正常。代码覆盖率也很好。但我的问题是,是否有任何可能的方法来避免使用 mockito 返回类 A 的上述私有(private)方法?

最佳答案

在单元测试中,您根据输入定义类的行为。这意味着您必须指定此输入。没有办法解决它。

有不同的方法可以做到这一点。

按照您的方式配置 DTO 的一种方法。

另一种方法是生成输入数据。但这有一些缺点:
- 你仍然需要一个方法(或类)来做到这一点,
- 它让你的测试更难阅读和理解,
- 它在您的测试中引入了失败的可能性,使其不太可靠,

另一种方法是在测试方法的 //arrange 部分中仅设置当前测试所需的那些值:

@Mock
B b;
@Test
public void check(){
// arrange
Mockito.when(b.method_b())
.thenReturn(return_A());
A a=new A();
// values to be used by cut in this test
a.setVal1(1);
a.setVal3(3);

// act
// assert
}

关于java - 除了在 mockito 中手动设置值之外,还有其他方法可以模拟 pojo 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41672398/

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