如何使mock方法返回相同的mock



我正在尝试模拟一个包含clone方法的类。我希望克隆返回相同的模拟:

when(regressor.cloneWithSharedResources()).thenReturn(regressor);

但是,这会给我返回一个不同的对象。有方便的方法吗?

也许我误解了你的问题,因为我无法重现这种行为。

我创建了一个简单的测试来复制它:

public class FooTest {
   class Regressor {
      public Regressor cloneWithSharedResources() {
         return new Regressor();
      }
   }
   class ClassToTest {
      public Regressor foo(Regressor regressor) {
         // ...
         return regressor.cloneWithSharedResources();
      }
   }
   @Test
   public void testFoo() throws Exception {
      Regressor regressor = Mockito.mock(Regressor.class);
      Mockito.when(regressor.cloneWithSharedResources()).thenReturn(regressor);
      ClassToTest classToTest = new ClassToTest();
      Regressor clonedRegressor = classToTest.foo(regressor);
      Assert.assertSame(regressor, clonedRegressor);
   }
}

这个测试成功通过,所以regressorclonedRegressor实际上是同一个对象。

请你告诉我是我错了还是我误解了什么。希望能有所帮助。

注意:我已经用Mockito 1.9.4 进行了测试

我认为它必须给出相同的对象。你能公布你的代码吗。我试过下面的代码,它给了我相同的对象。

t = mock(Tester.class);
when(t.clone()).thenReturn(t);

相关内容

  • 没有找到相关文章

最新更新