gpt4 book ai didi

java - 模拟私有(private)包装器/基元/字符串字段

转载 作者:行者123 更新时间:2023-12-01 19:30:16 25 4
gpt4 key购买 nike

我的问题不是this问题。我想模拟私有(private)包装字段,例如整数和字符串。此外,这些字段位于抽象父类(super class)中。

public abstract class SuperSample
{
private Integer var1;
private String var2;

private Service service;

pubic boolean foo()
{
int a = service.doStuff(var1, var2);
return subMethod(a);
}

protected abstract boolean subMethod(int var);

public void setVar1(Integer var1)
{
this.va1 = var1;
}

public Integer getVar1()
{
return var1;
}

public void setVar2(String var2)
{
this.var2 = var2;
}

public String getVar2()
{
return var2;
}

public void setService(Service service)
{
this.service = service;
}

public String getService()
{
return service;
}
}

public class Sample extends SuperSample
{
protected boolean subMethod(int var)
{
return var%2==0?true:false;
}
}

Spring.xml -

<bean id="superSample" class="SuperSample" abstract="true">
<property name="var1" value="2" />
<property name="var2" value="cool" />
</bean>

<bean id="sample" class="Sample" >
<property name="service" ref="service" />
</bean>

在我的 junit 中,我无法模拟或监视 var1 或 var2。在监视/模拟 var1, var2 时,我收到错误:

org.mockito.exceptions.base.MockitoException: Cannot mock/spy class java.lang.Integer Mockito cannot mock/spy following: - final classes - anonymous classes - primitive types

我想模拟这条线 -

service.doStuff(var1, var2)

像这样的东西-

@UnitTest
public class SampleTest
{
@Mock
private Service service;

private Integer var1 = 2
private String var2 = "cool";

@InjectMocks
private Sample sample;

@Test
public void test()
{
MockitoAnnotations.initMocks(this);
Mockito.when(service.doStuff(var1, var2)).thenReturn(5);
}
}

最佳答案

您可以简单地自己注入(inject)值,然后删除@InjectMocks注释。这最好在用 @Before 注释的设置方法中完成,以便为每个测试执行它。

@Before
public void setup() {
MockitoAnnotations.initMocks(this);
sample = new Sample();
sample.setVar1(1234);
sample.setVar2("5678");
sample.setService(service);
}

关于java - 模拟私有(private)包装器/基元/字符串字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59966531/

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