unit-testing - 使用 Mockito 多次调用相同的方法和不同的输出

标签 unit-testing testing junit mocking mockito

我想使用 mockito 并 stub 一个方法。我希望方法基于 stub 返回不同的值。但它总是返回第一个输出。以下是我的设置

Class Controller{    //this is singleton class

private final Foo foo=AFacftory.getFoo();    //this variable is initialized only once for the whole life cycle

//Some code below that I want to test is here
foo.functionInFoo()



}

    Class Foo{
    int functionInFoo(){

    }
}

Test1
Foo foo=Mockito.mock(Foo.class)
TestSettings.Provider.get().setTestBeanProvider(Foo.class, foo);
Mockito.when(foo.functionInFoo()).thenReturn(XXX);
hitAUrl();
//do some testing here using xxx.

Test2
Foo foo=Mockito.mock(Foo.class)
TestSettings.Provider.get().setTestBeanProvider(Foo.class, foo);
Mockito.when(foo.functionInFoo()).thenReturn(YYY);
hitAUrl();
//do some testing here using YYY.

变量 foo 在整个生命周期内只被实例化一次,因为它是 Controller 的一部分。 因此,当我运行我的第一个测试时, Controller 在我点击 AUrl() 时被初始化,它获得 Foo 的模拟实例并返回 XXX。但是当我运行第二个测试时,它仍然会有之前的模拟实例并再次返回 XXX。我希望它返回 YYY。如果我在 Test1 之后重新启动服务器,它会返回 YYY。但这必须在不重新启动的情况下工作。请让我知道如何解决这个问题。非常感谢任何帮助。

最佳答案

Mockito.when(foo.functionInFoo()).thenReturn(XXX, YYY);

当第一次调用 foo.functionUnFoo() 时,这将返回 XXX,此后每次调用 YYY

关于unit-testing - 使用 Mockito 多次调用相同的方法和不同的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30996552/

相关文章:

Java - 使用 java 1.4 编译 src/main/java 并使用 1.5 编译 src/test/java

testing - 如何计算ab测试样本量

java - 如何使用 JUnit 对 JavaFX Controller 进行单元测试

java - 如何使用 JUnit 5 测试调用 Instant.now() 的代码?

android - 有没有办法从下一次应用程序/进程崩溃测试继续进行 Espresso 测试?

Java 临时文件夹 getRoot() 异常

javascript - Angular Controller Mock 在我的 Mocha 测试中没有持续存在

java - Mockito 返回 false

带有子模块的 Python 模拟补丁

testing - 什么限制了 Gradle 构建中的活跃工作人员数量?