![](/img/trans.png)
[英]How to check that a method is not being called using JUnit Mockito Verify
[英][JUnit][Mockito] How to verify method was called another level down the call stack?
我有MyClass
,它具有OtherClass
作為字段:
public class MyClass
{
@Autowired
private OtherClass other;
public void foo() {
// Some interactions
other.bar(someParameter);
}
}
public class OtherClass
{
public void bar() {
// Some interactions
if (someConditionThatIsTrue) {
baz(someParam);
}
}
public void baz(SomeParamClass param) {
// Some interactions
}
}
為了測試MyClass
,我想檢查是否從MyClass.foo()
調用了OtherClass.baz()
MyClass.foo()
。 這就是我所擁有的:
@RunWith(MockitoJUnitRunner.class)
public class MyClassTest {
@InjectMocks
private MyClass myClass;
@Mock
private OtherClass otherClass;
@Test
public void testFoo_whenFooIsCalled_shouldTriggerBaz() {
// Some setups
myClass.foo();
verify(otherClass, times(1)).baz(any());
}
}
上面的測試未檢測到OtherClass.baz()
,但是檢測到OtherClass.bar()
:
Wanted but not invoked: otherClass.baz( <any> ); -> at MyClassTest.testFoo_whenFooIsCalled_shouldTriggerBaz(MyClassTest.java:12) However, there were other interactions with this mock: otherClass.bar( "some parameter" ); -> at MyClass.foo(MyClass.java:7)
如果不重構MyClass
,是否可以從測試中檢測OtherClass.baz()
的實例?
您只需要使用間諜
@Spy
private OtherClass otherClass;
但是,這不是一個好習慣。 您正在測試兩個不同的類。 我只想確保您在第一次測試中使用正確的參數調用bar
。 然后為OtherClass
創建一個單獨的單元測試文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.