本地方法不更新我的模拟类的实例变量

时间:2015-03-30 22:11:11

标签: java testng mockito

我是mockito的新手。花了一天多的时间,试图弄清楚它是如何工作的。这是我的最后一招。

我有一个课程如下:

class Check{
  //Map<String, Long> map1 = new HashMap<String, Long>();
  //Map<String, Long> map2 = new HashMap<String, Long>();

boolean myLocalMethod(String key, Map<String, Long> map1){
  if(map1.get(key) == null){
    map1.put("name", (long)10);
    return false;
  }
  else if(map1.get(key) == 10)
          return true;
       else
          return false;
}

我有一个测试类如下:

class TestCheck(){
 Check mockTest = mock(Check.class);

 @Test // using testng. That's what I like
 public void testMyLocalMethod(){
   Map<String, Long> map1 = new HashMap<String, Long>();
   Assert.assertFalse(mockTest.myLocalMethod("name", map1));
   map1.put("name", (long)10);
   Assert.assertTrue(mockTest.myLocalMethod("name", map1)); // fails

如果有人能在这里给我一些指导,那就太好了。提前谢谢!

2 个答案:

答案 0 :(得分:0)

当你要求Mockito模拟一个类时,它会覆盖你现有的实现。在内部,它定义了一个新类,如果你明确地做了这个类,它在基本层面看起来像这样,并且不使用when或类似的东西添加任何其他行为:

class MockCheck extends Check {
  @Override
  void myLocalMethod(String key) {}
}

即。调用myLocalMethod实际上并不调用父类的myLocalMethod版本。

如果您想使用Check的实现,只需将其实例化为常规对象:

Check mockTest = new Check();

答案 1 :(得分:0)

正如其他人提到的,模拟对象不会使用您的实际实现。但是,您可以使用Spy对象来验证行为,同时使用您的实际实现,请参阅Spying on real objects