org.mockito.exceptions.misusing.WrongTypeOfReturnValue: TpEmployeeInfo cannot be returned by getSessionUser() getSessionUser() should return SessionUser *** 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.
时间: 2024-03-29 09:38:57 浏览: 284
这个错误是由Mockito框架抛出的,意味着你使用了错误的返回类型来模拟getSessionUser()方法的返回值。根据错误消息中的提示,getSessionUser()方法应该返回SessionUser类型的值,但是你却返回了TpEmployeeInfo类型的值。因此,你需要查看你的测试代码,并确保你正确地模拟了getSessionUser()方法并使用了正确的返回类型。以下是一些可能的原因和解决方案:
1. 多线程测试的限制:如果你在多线程测试中遇到了这个错误,可能是因为你没有正确地同步你的测试代码。请查看Mockito的FAQ,了解关于并发测试的限制和最佳实践。
2. 使用when(spy.foo()).then()语法来模拟一个Spy对象:如果你在模拟Spy对象时遇到了这个错误,你应该使用doReturn()或doThrow()等方法来模拟方法的返回值,而不是when(spy.foo()).then()语法。
例如,假设你的测试代码是这样的:
```java
@Test
public void testSomeMethod() {
// 创建一个Spy对象
SomeClass spy = Mockito.spy(new SomeClass());
// 模拟getSessionUser()方法并返回错误的类型
when(spy.getSessionUser()).thenReturn(new TpEmployeeInfo());
// 调用被测试的方法
someMethod(spy);
// 断言测试结果
// ...
}
```
你应该使用doReturn()方法来模拟getSessionUser()方法的返回值,例如:
```java
@Test
public void testSomeMethod() {
// 创建一个Spy对象
SomeClass spy = Mockito.spy(new SomeClass());
// 模拟getSessionUser()方法并返回正确的类型
doReturn(new SessionUser()).when(spy).getSessionUser();
// 调用被测试的方法
someMethod(spy);
// 断言测试结果
// ...
}
```
这样就可以避免上述错误了。
阅读全文