我是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


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

最佳答案

当您要求Mockito模拟一个类时,它会覆盖您现有的实现。在内部,它定义了一个新类,如果您显式地进行了创建,并且没有使用when或类似方法添加任何其他行为,则它在基本级别上看起来像这样:

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


也就是说,调用myLocalMethod并不会真正调用myLocalMethod的父类版本。

如果要使用Check的实现,只需像常规对象一样实例化它:

Check mockTest = new Check();

关于java - 本地方法未更新模拟类的实例变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29357266/

10-11 07:51