gpt4 book ai didi

java - 如何使用 Mockito 模拟 @Value 类?

转载 作者:行者123 更新时间:2023-12-05 01:59:13 32 4
gpt4 key购买 nike

我想对以下类进行单元测试:

@Data
@AllArgsConstructor
public class MyClass {

private MyValueClass valueObject;

public BigDecimal someMethod(int startId, int endId) {

List<BigDecimal> values = valueObject.get(startId, endId);

...

我试着模仿 MyValueClass 看起来像:

@Value //lombok annotation
public class MyValueClass {

private List<Data> someData;

public List<BigDecimal> get(int startId, int endId) {

//code to get subset of someData with ids between startId and endId

}

但是当我运行这个 junit (jupiter) 测试时:

@ExtendWith(MockitoExtension.class)
class MyClassTest {

private MyClass myClass;

@Mock
private MyValueClass valueOjectMock;

@BeforeEach
public void setUp() {
myClass= new myClass(valueOjectMock);
}

@Test
void test() {
when(valueOjectMock.get(1,5))
.thenReturn(new ArrayList<>());
....
}
}

我收到以下错误:

org.mockito.exceptions.base.MockitoException: 
Cannot mock/spy class com.seasset.funds.performance.domain.FundReturns
Mockito cannot mock/spy because :
- final class
at org.mockito.junit.jupiter.MockitoExtension.beforeEach(MockitoExtension.java:153)

但是 MyValueClass 不是最终的。为什么会出现此错误?我如何模拟这个类?

最佳答案

值对象永远不应该被模拟。毕竟它只是一个不可变的值(这就是为什么 lombok 将其定为 final 的原因)。如果它包含复杂的逻辑或隐藏的可变状态(因此不是真正的值对象),则不应使用 @Value,而应使用您需要的各个部分(如 @Getter).

关于java - 如何使用 Mockito 模拟 @Value 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68011329/

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