dur*_*597 31 java debugging junit unit-testing mockito
我有一个失败的单元测试,我不确定为什么.我希望能够看到在被测系统中发生的模拟上的所有调用.这不是我想要的所有测试的行为,只是为了我需要快速调整以便能够弄清楚什么是错误的测试.
然而,它似乎有点像黑客.是否有可能在Mockito本地执行此操作,而不必使用Thread.currentThread().getStackTrace()?
这不是首选,因为堆栈跟踪包括Mockito内部使用的所有其他调用.
MRa*_*ser 46
此功能自Mockito 1.9.5开始构建.只是用
mock(ClassToMock.class, withSettings().verboseLogging())
Run Code Online (Sandbox Code Playgroud)
dav*_*xxx 10
从 Mockito 2.2.6 开始,您可以使用MockingDetails Mockito.mockingDetails(Object mockToInspect).
您可以挖掘到MockingDetails通过调用属性:getMock(),getStubbings(),getInvocations()等了......或者干脆使用printInvocations()方法,它返回:
模拟对象发生的调用的打印友好列表。此外,此方法打印存根信息,包括未使用的存根。有关未使用的存根检测的更多信息,请参阅 MockitoHint。
以 JUnit 5 为例:
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.junit.jupiter.MockitoExtension;
import org.mockito.Mock;
import org.mockito.Mockito;
import static org.mockito.Mockito.*;
@ExtendWith(MockitoExtension.class)
public class FooTest {
Foo foo;
@Mock
Bar bar;
@Test
void doThat() throws Exception {
Mockito.when(bar.getValue())
.thenReturn(1000L);
// ACTION
foo.doThat();
// ASSERTION
// ...
// add that to debug the bar mock
System.out.println(mockingDetails(bar).printInvocations());
}
}
Run Code Online (Sandbox Code Playgroud)
你会得到一个输出,例如:
[Mockito] 交互:Mock for Bar,hashCode:962287291 1. bar.getValue(); -> 在 Foo.doThat() (Foo.java:15) - 存根 -> 在 FooTest.doThat(FooTest.java:18)
请注意,输出中带有引用行的类是指向源代码/测试类的链接。非常实用。
| 归档时间: |
|
| 查看次数: |
10652 次 |
| 最近记录: |