gpt4 book ai didi

java - 是否可以使用 @Spy 表示法在 Mockito 中声明但不能实例化一个 spy 对象?

转载 作者:行者123 更新时间:2023-11-30 07:44:52 27 4
gpt4 key购买 nike

我正在为遗留代码编写一些 JUnit 测试,并且我非常喜欢使用注释。我想知道是否可以创建一个 spy 对象的声明,然后实例化它。我问的原因是因为我有一个带有非空构造函数的类。该构造函数的值直到测试用例设置之后才知道。下面的代码显示了我想要做的事情:

@RunWith(MockitoJUnitRunner.class)
public class ObjectUndertestTest {

@Spy private SomeClassToSpy someClassToSpy;
private Integer parameterOne;
private Integer parameterTwo;

@Before
public void setupTest() {
parameterOne = 1;
parameterTwo = 2;
someClassToSpy = new SomeClassToSpy(parameterOne, parameterTwo);
}
}

我认为能够做到这一点的唯一方法是混合我的语法并使用传统的 spy (对象模拟)符号。即:

@RunWith(MockitoJUnitRunner.class)
public class ObjectUndertestTest {

private SomeClassToSpy someClassToSpy;
private Integer parameterOne;
private Integer parameterTwo;

@Before
public void setupTest() {
parameterOne = 1;
parameterTwo = 2;
someClassToSpy = new SomeClassToSpy(parameterOne, parameterTwo);
SomeClassToSpy spySomeClassToSpy spy(someClassToSpy);
}
}

或者类似的东西。对此有什么想法吗?

最佳答案

请注意@Spy并不是真正的文档注释:它是 MockitoJUnitRunner(等)根据其记录的使用模式自动初始化 spy 程序的指令。尽管注释很有用且信息丰富,但我认为将注释用于其名称而不是其语义可能会导致更多困惑。

也就是说,如果只是使用您选择的构造函数参数构造一个实例,您可以直接显式调用构造函数,并使用 Mockito 的初始化将其包装在 spy 中(如 @Spy docs ):

@Spy private SomeClassToSpy someClassToSpy = new SomeClassToSpy(1, 2);

尽管您倾向于使用 @Before 方法而不是类初始化器或构造函数是正确的,但这是一种明确记录的初始化方法,并且不太可能导致测试污染或初始化顺序问题。

关于java - 是否可以使用 @Spy 表示法在 Mockito 中声明但不能实例化一个 spy 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34075245/

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