当前位置: 首页 > 面试题库 >

如何告诉Mockito模拟对象在下次调用时返回不同的内容?

吴同
2023-03-14
问题内容

因此,我正在像这样在类级别上将模拟对象创建为静态变量…在一个测试中,我想Foo.someMethod()返回某个值,而在另一个测试中,我希望它返回一个不同的值。我遇到的问题是,似乎我需要重建模拟才能使其正常工作。我想避免重建模拟,只在每个测试中使用相同的对象。

class TestClass {

    private static Foo mockFoo;

    @BeforeClass
    public static void setUp() {
        mockFoo = mock(Foo.class);
    }

    @Test
    public void test1() {
        when(mockFoo.someMethod()).thenReturn(0);

        TestObject testObj = new TestObject(mockFoo);

        testObj.bar(); // calls mockFoo.someMethod(), receiving 0 as the value

    }

    @Test
    public void test2() {
        when(mockFoo.someMethod()).thenReturn(1);

        TestObject testObj = new TestObject(mockFoo);

        testObj.bar(); // calls mockFoo.someMethod(), STILL receiving 0 as the value, instead of expected 1.

    }

}

在第二个测试中,当调用testObj.bar()时,我仍然收到0作为值。解决此问题的最佳方法是什么?请注意,我知道我可以Foo在每个测试中使用不同的模拟,但是,我必须从链接多个请求mockFoo,这意味着我必须在每个测试中进行链接。


问题答案:

首先,不要使模拟静态。将其设为私有字段。只需将您的setUp类放在@Beforenot中@BeforeClass。它可能会运行很多,但是很便宜。

其次,您现在拥有的方式是获取模拟以根据测试返回不同内容的正确方法。



 类似资料:
  • 我正在尝试对一个方法进行单元测试,根据在其中创建的对象的值,该方法有不同的分支。下面的代码演示了它。 下面是TestClass: 但是,它总是失败,因为c_objectMock始终为空。我该怎么做才能告诉Mockito不要返回空对象?

  • 我调用了一个方法,它连接到另一个服务器,每次调用它,它都返回不同的数据。 我正在为调用该方法的类编写一个单元测试。我已经嘲笑了那个类,我希望它返回存根结果。它实际上使用工作,但是它每次都返回相同的数据。我希望它返回不同的数据,我希望能够指定它应该是什么。 我试着使用“doReturn-when”,它可以工作,但我无法让它返回不同的结果。我不知道怎么做。 我还尝试使用“when-thenReturn

  • 如何模拟返回已强制转换的模拟对象的方法。 试验方法。

  • 当尝试将Mockito与spring一起使用时,通过bean声明创建Mock对象... ...我在调用mockito时发现了一些奇怪的行为。当多次没有重置Mock对象时,例如: 在测试过程中(在同一个模拟上)多次调用此代码(“mockito.when”)时,测试就会失败并出现错误(BadSqlGrammerException即使该异常实际上是预期的--如果不抛出异常,我会得到一个失败,并且手动抛出

  • 我的实现中有以下代码行: 我试着在我的测试课上模仿上述内容,如下所示: 但是当我调试测试代码时,我可以看到myService。getTypes正在返回一个空列表。有什么问题? 还有,有没有办法使用args来简化上述模拟?我发现的只是使用传递到方法中的参数,而不是传递到方法中的参数。

  • 让我向您展示getCurrentWeatherWithForecastUsecase类actgually是什么样子: } //这很容易,它只需要一个天气存储库,并要求它获取结果。我把它发送回调用者,调用者将显示它。 更新: 以下是故障的整个堆栈跟踪: