如何解决无法转到模拟类的方法
我遇到了 JUnit 测试用例的问题。出于某种原因,我无法转到模拟类的方法,我不确定为什么会发生这种情况。
import java.util.ArrayList;
import static java.util.UUID.randomUUID;
public class Sample {
protected SomeClass someClass;
public void setVariables(SomeClass someClass) {
this.someClass = someClass;
}
protected UserInfo func(String id){
UserInfo userInfo = someClass.getInfo(id);
// I checked that the someClass is mocked instance
// id is not null
}
}
我什至不采用以下方法。我不确定为什么会发生这种情况,然后在上述声明中给了我 NPE。
public class SomeClass{
public UserInfo getInfo(String id) {
// not even going in this function at all
if (id == null || id.isEmpty()) return null;
UserInfo userInfo = null;
try {
// do Something
} catch () {
}
return userInfo;
}
}
class SampleTest{
Sample sample;
SomeClass someclass = mock(SomeClass.class);
UserInfo userinfo = mock(UserInfo.class);
@BeforeEach
void setUp(){
// other initialization
sample = new Sample();
sample.setVariables(someclass);
}
@Test
void func(){
when(someclass.getInfo(randomUUID().toString())).thenReturn(userinfo);
UserInfo userInfo = sample.func(randomUUID().toString());
// comparison using assert
}
}
解决方法
错误的when语句。
when(someclass.getInfo(randomUUID().toString())).thenReturn(userinfo)
一些可能的解决方案:
var randomUuid = randomUUID().toString();
when(someclass.getInfo(anyString())).thenReturn(userinfo)
when(someclass.getInfo(any())).thenReturn(userinfo)
when(someclass.getInfo(eq(randomUuid))).thenReturn(userinfo)
如果您模拟 SomeClass 的实例,您的 getInfo 代码将不会被执行,请尝试使用 spy。
SomeClass someclass = spy(SomeClass.class);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。