JiK*_*Kra 6 intellij-idea mockito
有这个简单的片段。
@Component
public class SomeDependency {
public Optional<Integer> getSomeInt(String string) {
return Optional.of(1);
}
}
@Component
public class SomeService {
@Autowired
private SomeDependency someDependency;
public String someMethod(String string) {
return String.valueOf(someDependency.getSomeInt(string).get());
}
}
@RunWith(MockitoJUnitRunner.class)
public class SomeServiceTest {
@Mock
private SomeDependency someDependency;
@InjectMocks
private SomeService someService;
@Test
public void test() {
when(someDependency.getSomeInt(anyString()))
.thenReturn(Optional.of(111));
String value = someService.someMethod("test");
assertThat(value, is("111"));
}
}
Run Code Online (Sandbox Code Playgroud)
现在,当我运行测试时,一切正常,但是当我在调试模式下运行它,同时在 when...thenReturn... mock 和 use 上设置断点时step over,会引发以下错误。
org.mockito.exceptions.misusing.WrongTypeOfReturnValue:
Optional cannot be returned by toString()
toString() should return String
***
If you're unsure why you're getting above error read on.
Due to the nature of the syntax above problem might occur because:
1. This exception *might* occur in wrongly written multi-threaded tests.
Please refer to Mockito FAQ on limitations of concurrency testing.
2. A spy is stubbed using when(spy.foo()).then() syntax. It is safer to stub spies -
- with doReturn|Throw() family of methods. More in javadocs for Mockito.spy() method.
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用下面的 oneliner 而不是twoliner,那就没问题了。没有返回错误。
when(someDependency.getSomeInt(anyString())).thenReturn(Optional.of(111));
Run Code Online (Sandbox Code Playgroud)
那么,问题出在哪里呢?
小智 8
你用idea来调试吗?idea调试器可能会破坏存根过程。
转到Preferences -> Build,Execution,Deployment -> Debugger -> Data Views -> Java,取消Enable 'toString()' object view复选框
| 归档时间: |
|
| 查看次数: |
4728 次 |
| 最近记录: |