Java &引用;方法x对于类型“不明确”;莫基托JUnit错误

Java &引用;方法x对于类型“不明确”;莫基托JUnit错误,java,junit,mockito,Java,Junit,Mockito,我的主要课程如下:- class Main { String str = ""; protected String getStr(JavaRDD<String> obj) { return "Main"; } } class Child extends Main { String str = ""; protected String getStr(Dataset<Row> records ) {

我的主要课程如下:-

class Main
{
    String str = "";
    protected String getStr(JavaRDD<String> obj)
    {
        return "Main";
    }   
}
class Child extends Main
{
    String str = "";
    protected String getStr(Dataset<Row> records )
    {
        return "Child";
    }   
}
//My test class :- 

class mainTest extends Child
{
    Child child;
    @Test
    public void testGetStr()
    {
        child = Mockito.mock(Child .class);
        Mockito.when(child.getStr(anyObject())).thenCallRealMethod();//Compilation Error
    }
}
主类
{
字符串str=“”;
受保护字符串getStr(JavaRDD obj)
{
返回“Main”;
}   
}
类子级扩展主
{
字符串str=“”;
受保护的字符串getStr(数据集记录)
{
返回“孩子”;
}   
}
//我的测试班:-
类mainTest扩展子类
{
儿童;
@试验
公共void testGetStr()
{
child=Mockito.mock(child.class);
Mockito.when(child.getStr(anyObject()).thenCallRealMethod();//编译错误
}
}
我得到的错误是:
方法getStr(数据集)对于类型Child不明确


请让我知道这个问题的解决方案,因为我无权更改主类和子类。当我模拟子类时,
getStr()
没有被调用。

看起来
child
并没有真正覆盖
Main
getStr
方法,因为方法签名不同

因此,在调用
Child.getStr(anyObject())
时,编译器无法判断实际应该调用哪个方法。它应该是
getStr(数据集记录)
还是
getStr(javarddobj)
anyObject
方法提供了一个对象,该对象将匹配any

我建议重命名其中一个方法,或者使用
any(Dataset.class)
,这将告诉编译器使用
Child
方法,如下所示:

Mockito.when(child.getStr(any(Dataset.class))).thenCallRealMethod();

可能使用部分模拟。然后你可以模拟,但是对于那个特定的方法,use可以调用real方法。any没有帮助。你能用any(Dataset.class)发布版本吗?Mockito.any(Child.class)。getStr(anyObject())。然后调用realmethod();哦,我明白了。它应该替换anyObject()方法。我将编辑我的帖子,以包含整行内容。