gpt4 book ai didi

java - 使用 Mockito 模拟 lombok @Getter 字段

转载 作者:行者123 更新时间:2023-12-05 06:38:08 27 4
gpt4 key购买 nike

我在我的一些静态字段上使用带有 Lombok 的 @Getter 符号:

public class A {

@Getter protected static MyClass myClass;
}

在进行单元测试时,我必须为一段代码模拟这些静态字段的值:

MyClass.getMyClass();

为了 mock ,我在做:

mock(MyClass.class);
when(MyClass.getMyClass()).thenReturn(...);

但是,这样的模拟给出了以下错误。

 [testng] org.mockito.exceptions.misusing.MissingMethodInvocationException:
[testng] when() requires an argument which has to be 'a method call on a mock'.
[testng] For example:
[testng] when(mock.getArticles()).thenReturn(articles);
[testng]
[testng] Also, this error might show up because:
[testng] 1. you stub either of: final/private/equals()/hashCode() methods.
[testng] Those methods *cannot* be stubbed/verified.
[testng] Mocking methods declared on non-public parent classes is not supported.
[testng] 2. inside when() you don't call method on mock but on some other object.

我一定是遇到了条件 2,但我不明白我为什么没有“在 mock 上调用方法”。

有没有人成功模拟过Lombok getters?

谢谢!

最佳答案

正如我在上面的评论中所说,Mockito 不支持模拟静态方法。

使用Powermock

例子:

@RunWith(PowerMockRunner.class)
@PrepareForTest(A.class)
public class YourTestClass{
PowerMockito.mockStatic(A.class);

when(A.getMyClass()()).thenReturn(...);

}

此外,

MyClass.getMyClass();


getMyClass() belongs to class A or class Myclass ?

关于java - 使用 Mockito 模拟 lombok @Getter 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46598432/

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