【发布时间】:2021-08-24 13:22:14
【问题描述】:
我正在尝试验证在测试期间是否调用了静态方法。但是,由于在运行期间调用了同一类的多个静态方法,因此它会引发异常。这两种静态方法都是模拟的。确切的例外是这样的:-
验证静态存根时发生意外错误。
要正确验证存根,请调用单个静态方法 com.booking.capacityservicejobs.models.YourStaticClass 在提供 拉姆达。
例如,如果定义了方法“sample”,则提供 lambda 或 包含代码的匿名类。
代码是这样的:-
try (MockedStatic<MyClass1> theMock = Mockito.mockStatic(MyClass1.class);
MockedStatic<MyClass2> configMock = Mockito.mockStatic(MyClass2.class);
MockedStatic<MyClass3> downtimeMock = Mockito.mockStatic(MyClass3.class)) {
theMock.when(MyClass1::lockAndFetch).thenReturn(duRuns);
theMock.when(() -> MyClass1.startAndUnlock(1)).thenAnswer(invocation -> null);
configMock.when(() -> MyClass2.getById(1)).thenReturn(dummyConfig);
downtimeMock.when(() -> MyClass3.isScheduledForRole("app-dummy")).thenReturn(false);
new RunExecutor().run(); //this executes the code to be tested
theMock.verify(() -> MyClass1.startAndUnlock(1));
}
我可以在不使用 powermock 的情况下绕过这个限制吗?验证多个(不同)静态方法调用的正确方法是什么?
【问题讨论】:
-
不要。要么静态是不可见的实现细节(在这种情况下不测试),要么应该用策略对象替换它们(使用 lambda 和方法引用非常容易)。
-
请在问题中包含您的代码。
-
@TimMoore 更新了!