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

打印语句然后返回mockito

梁晋鹏
2023-03-14

在编写测试用例时,我使用Mockito模拟某个类。

有没有办法在返回值之前打印一些语句?例如:

when(x.callFunction(10).thenReturn(new String("Hello"));

上述声明有效,但我无法做到以下几点:

when(x.callFunction(10).thenReturn({
   System.out.println("Mock called---going to return hello");
   return new String("Hello");});

共有3个答案

庞元青
2023-03-14

我喜欢其他答案,但鉴于你最近的评论:

我将在最终代码中使用thenReturn。这更多的是测试我的测试代码,并检查我的模拟函数是否被调用!

我有另一个想法给你:不要回复/打印那个电话;改用throw()!

重点是:控制台中的打印语句有时很有用;但它们很容易被忽视。如果整个目的是确保某个调用在某个模拟上发生;然后抛出一个异常,而不是返回一个值。因为JUnit会给你直接且难以忽视的反馈;通过测试用例失败。

如果没有调用mock,你甚至可以更进一步,在测试中设置@expected,这样你就有了一个自动测试这个方面的方法;没有例外;测试将失败。

咸育
2023-03-14

如果您要创建的对象不是Final,那么除了@Roland Weisleder提供的then答案之外,您可以在thenBack中使用带有init块的匿名子类,例如以下示例代码

class FoobarFactory {
    public Foobar buildFoobar() {
        return null;
    }
}

class Foobar {
    private String name;
    public Foobar(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

模拟代码为:

@Test
public void testFoobar() throws Exception {
    FoobarFactory foobarFactory = mock(FoobarFactory.class);
    when(foobarFactory.buildFoobar()).thenReturn(new Foobar("somename") {
        {
            System.out.println("Creating mocked Foobar");
        }
    });

    Foobar foobar = foobarFactory.buildFoobar();
    assertThat(foobar.getName(), is("somename"));
}
慕容嘉荣
2023-03-14

使用then答案,您可以在每次调用模拟方法时执行其他操作。

when(x.callFunction(10)).thenAnswer(new Answer<String>() {
    public String answer(InvocationOnMock invocation)  {
        System.out.println("Mock called---going to return hello");
        return "Hello";
    }
});

另请参见Answer Vs thenReturn。

 类似资料:
  • 我正在使用一个可以进行温度转换的程序,并且已经有了代码,但现在我必须制作一个测试代码的程序。对于我需要帮助的部分,我从这样的构造函数开始: 然后我制定了一种方法,从摄氏度或华氏度中获取温度,如下所示: 最后,我在测试编码中写道: 我的问题是,当我运行这个程序时,温度没有显示出来,当我输入此代码的输出时,它返回原始温度(52华氏度)。我如何让它显示我需要的温度(11.1摄氏度)?另外,请注意,我刚刚

  • 问题内容: 我正在编写一个小程序,我想使用: 这很好,除了在打印打印语句后没有提示的事实。喜欢: 如果可能的话,如何删除“无”?我也确实搜索了这个问题,但是什么也没有在输入中返回none。 问题答案: 将字符串作为参数,它将自动打印,但返回;这是由打印的。您的代码等效于: 而是使用构建提示并将其直接传递给:

  • 我目前正在学习Spring boot,我一直在测试一个项目——非常感谢任何帮助,因为我是这里的初学者。 我有一个rest控制器测试,使用Mockito,当使用Mockito.when()调用方法时,该测试似乎忽略了Then返回。 这是整个班级: 名为“testCreateUser”的测试没有问题地通过了。给我一个问题的是名为“testFindUserById”的测试。 以下是我尝试测试的控制器方法

  • 我对反应性编程相对较新。我的问题是关于

  • 所以我有这个代码,叫我白痴哈哈,但是我不能让它打印7。 代码: 我需要知道如何改变与函数中的参数同名的变量。 任何帮助都将不胜感激,如果你不明白这个问题,我很乐意解释更多。

  • 我不得不使用全局变量found来指示在哪里找到了一个和。返回语句始终未定义。 此外,如果在下面的if语句中使用return语句,代码将无法正常工作。 这不是问题的最佳解决方案,但这是我得到的工作版本。 返回语句之间的****,删除时代码工作,否则我要么得到false或未定义。我不明白这部分!为什么删除返回就能解决问题,我认为每个递归调用都必须用返回语句进行。 问题可能是由于多次呼叫造成的吗?我是不