当前位置: 首页 > 知识库问答 >
问题:

在Mockito中检测到未完成的根茬

仲孙翔飞
2023-03-14

我在运行测试时遇到了以下异常。我在用Mockito来嘲笑。Mockito库提到的提示没有帮助。

org.mockito.exceptions.misusing.UnfinishedStubbingException: 
Unfinished stubbing detected here:
    -> at com.a.b.DomainTestFactory.myTest(DomainTestFactory.java:355)

    E.g. thenReturn() may be missing.
    Examples of correct stubbing:
        when(mock.isOk()).thenReturn(true);
        when(mock.isOk()).thenThrow(exception);
        doThrow(exception).when(mock).someVoidMethod();
    Hints:
     1. missing thenReturn()
     2. you are trying to stub a final method, you naughty developer!

        at a.b.DomainTestFactory.myTest(DomainTestFactory.java:276)
        ..........

DomaintenFactory测试代码。当我运行以下测试时,我看到异常。

@Test
public myTest(){
    MyMainModel mainModel =  Mockito.mock(MyMainModel.class);
    Mockito.when(mainModel.getList()).thenReturn(getSomeList()); // Line 355
}

private List<SomeModel> getSomeList() {
    SomeModel model = Mockito.mock(SomeModel.class);
    Mockito.when(model.getName()).thenReturn("SomeName"); // Line 276
    Mockito.when(model.getAddress()).thenReturn("Address");
    return Arrays.asList(model);
}

public class SomeModel extends SomeInputModel{
    protected String address;
    protected List<SomeClass> properties;

    public SomeModel() {
        this.Properties = new java.util.ArrayList<SomeClass>(); 
    }

    public String getAddress() {
        return this.address;
    }

}

public class SomeInputModel{

    public NetworkInputModel() {
        this.Properties = new java.util.ArrayList<SomeClass>(); 
    }

    protected String Name;
    protected List<SomeClass> properties;

    public String getName() {
        return this.Name;
    }

    public void setName(String value) {
        this.Name = value;
    }
}

共有1个答案

林夕
2023-03-14

你在嘲笑中嵌套嘲笑。在完成对MyMainModel的模拟之前,调用getSomelist(),它执行一些模拟。Mockito不喜欢你这么做。

替换

@Test
public myTest(){
    MyMainModel mainModel =  Mockito.mock(MyMainModel.class);
    Mockito.when(mainModel.getList()).thenReturn(getSomeList()); --> Line 355
}

@Test
public myTest(){
    MyMainModel mainModel =  Mockito.mock(MyMainModel.class);
    List<SomeModel> someModelList = getSomeList();
    Mockito.when(mainModel.getList()).thenReturn(someModelList);
}
Mockito.when(mainModel.getList()).thenReturn(someModelList);
    null
mainModel.getList();
Mockito.when((List<SomeModel>)null).thenReturn(someModelList);

这种样式读起来不太清楚,特别是因为在本例中必须对null进行浇注,但它与Mockito生成了相同的交互序列,并将获得与上面一行相同的结果。

但是,线路

Mockito.when(mainModel.getList()).thenReturn(getSomeList());

导致以下与Mockito的交互:

    null
when(mainModel.getList());
// ...
when(model.getName()).thenReturn(...);
 类似资料:
  • 问题内容: 运行测试时出现以下异常。我正在使用Mockito进行嘲笑。Mockito库提到的提示无济于事。 来自的测试代码。当我运行以下测试时,我看到了异常。 问题答案: 您是在嘲笑内部嵌套嘲笑。在完成对的模拟之前,您正在呼叫,它会进行一些模拟。执行此操作时,Mockito不喜欢它。 更换 与 要了解为什么这会导致问题,您需要稍微了解Mockito的工作方式,并且还需要知道Java中表达式和语句按

  • 我试图理解使用PowerMockito模拟静态方法进行测试的基础知识,因为我对这方面还不熟悉。我被卡住了,因为如果我使用下面提到的测试饮料,会出现非常不寻常的情况。java我得到未完成的stubging异常。 但当我换乘多伦时。。当。。然后返回异常消失。 TestDrink.java 这就是我想嘲弄的班级。 可乐JAVA 例外 如果可能,请尽量给出解释清楚的答案。

  • 我在两篇关于堆栈溢出的文章中读到过关于这个问题的文章,但它们没有详细说明。我相信这与在嘲笑中嵌套嘲笑有关(根据我读到的)。然而,我并没有看到或完全理解人们张贴的小片段。 我的测试类如下所示(省略了不必要的代码): 我需要调用的方法:

  • 与不同,没有简单的方法来设置空视图,因此必须手动管理它,在适配器的项计数为0的情况下使空视图可见。 为了实现这一点,首先,我尝试在修改下垫结构(在我的示例中为)后立即调用空视图逻辑,例如: 它做了这件事,但有一个缺点:当最后一个元素正在被移除时,空视图出现在移除动画完成之前,在移除之后立即出现。所以我决定等到动画结束再更新UI。 令我惊讶的是,我找不到一个好的方法来收听RecycerView中的动

  • 问题内容: 是的,在您将我指向他们之前,我已经回顾了有关该主题的六篇文章,但是我仍然对为什么这行不通感到困惑。 我的目标是检测自动填充何时产生0个结果。这是代码: 搜索本身工作正常,我可以毫无问题地显示结果。据我了解,我 应该 能够使用autocomplete(“ result”)处理程序拦截结果。在这种情况下,它根本不会触发。(即使不引用结果数量的通用警报或console.log也不会触发)。打

  • 问题内容: 在我的应用程序中,我尝试为用户打印出凭证页面,如下所示: “ ”是我的页面中的,用于存储有关凭证的信息。 它有效,并且打印页面弹出。但是,我希望用户一旦在浏览器的弹出式打印对话框中单击“ ”或“ ”,便可以升级该应用程序。 例如,我想在弹出窗口关闭后将用户重定向到另一个页面: 如何确定何时关闭弹出的打印窗口或打印完成? 问题答案: 在FireFox和Internet Explorer中