无法模拟 JUnit 5 中的枚举值
Cannot mock Enum values in JUnit 5
由于我使用枚举值模拟变量的行,我遇到了“不必要的存根”错误:
when(productProjection.getType()).thenReturn(ProductType.USER_ADDED);
我没有模拟 ProductType
,但即使尝试模拟如下所示,也没有任何意义:
@Mock
private ProductType productType;
那么,我应该如何在单元测试中使用枚举(我使用 JUnit5)?或者如何解决这个问题?
有时,当您在一组测试中看到这样的错误时 运行,但不是在单个测试中,Mockito 会针对错误的测试报告错误。这是因为 Mockito 不知道您没有调用存根方法,直到下一个测试开始。
想象一下你有这样的测试。
Test 1:
Stub method X
Call method X
Test 2:
Stub method X
Test 3:
Stub method X
Call method X
那么测试1和测试2就可以了,因为你没有做错任何事。但是,如果您 运行 按顺序执行所有测试,那么当您开始 运行 测试 3 时,Mockito 检测到您在测试 2 中存根了一个方法但没有调用它。
当然,在这种情况下,如果您 运行 自己测试 3,Mockito 将不会发出任何警告。
我的建议是在发出警告之前查看测试。您的“不必要的存根”最有可能在其中。
由于我使用枚举值模拟变量的行,我遇到了“不必要的存根”错误:
when(productProjection.getType()).thenReturn(ProductType.USER_ADDED);
我没有模拟 ProductType
,但即使尝试模拟如下所示,也没有任何意义:
@Mock
private ProductType productType;
那么,我应该如何在单元测试中使用枚举(我使用 JUnit5)?或者如何解决这个问题?
有时,当您在一组测试中看到这样的错误时 运行,但不是在单个测试中,Mockito 会针对错误的测试报告错误。这是因为 Mockito 不知道您没有调用存根方法,直到下一个测试开始。
想象一下你有这样的测试。
Test 1:
Stub method X
Call method X
Test 2:
Stub method X
Test 3:
Stub method X
Call method X
那么测试1和测试2就可以了,因为你没有做错任何事。但是,如果您 运行 按顺序执行所有测试,那么当您开始 运行 测试 3 时,Mockito 检测到您在测试 2 中存根了一个方法但没有调用它。
当然,在这种情况下,如果您 运行 自己测试 3,Mockito 将不会发出任何警告。
我的建议是在发出警告之前查看测试。您的“不必要的存根”最有可能在其中。