本地方法没有更新我模拟的 class 的实例变量
Local method is not updating the instance variables of my mocked class
我是 mockito 的新手。现在花了一天多的时间,试图弄清楚这是如何工作的。这是我不得已的办法。
我有一个class如下:
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如下:
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 模拟一个 class 时,它会覆盖您现有的实现。在内部,它定义了一个新的 class,如果您明确地这样做并且不使用 when
或类似的方式添加任何其他行为,它在基本级别上看起来像这样:
class MockCheck extends Check {
@Override
void myLocalMethod(String key) {}
}
即调用 myLocalMethod
实际上并没有调用父 class' 版本的 myLocalMethod
.
如果您想使用 Check
的实现,只需像普通对象一样实例化它:
Check mockTest = new Check();
正如其他人所提到的,模拟对象不会使用您的实际实现。但是,您可以使用 Spy
对象来验证行为,同时使用您的实际实现,请参阅 Spying on real objects
我是 mockito 的新手。现在花了一天多的时间,试图弄清楚这是如何工作的。这是我不得已的办法。
我有一个class如下:
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如下:
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 模拟一个 class 时,它会覆盖您现有的实现。在内部,它定义了一个新的 class,如果您明确地这样做并且不使用 when
或类似的方式添加任何其他行为,它在基本级别上看起来像这样:
class MockCheck extends Check {
@Override
void myLocalMethod(String key) {}
}
即调用 myLocalMethod
实际上并没有调用父 class' 版本的 myLocalMethod
.
如果您想使用 Check
的实现,只需像普通对象一样实例化它:
Check mockTest = new Check();
正如其他人所提到的,模拟对象不会使用您的实际实现。但是,您可以使用 Spy
对象来验证行为,同时使用您的实际实现,请参阅 Spying on real objects