java - Mockito 空指针异常

标签 java spring junit mockito

我遵循了@hoaz 的建议。但是,我得到空指针异常

@RunWith(MockitoJUnitRunner.class)
public class GeneralConfigServiceImplTest  {

@InjectMocks private GeneralConfigService generalConfigService;
@Mock private SomeDao someDao;
@Mock private ExternalDependencyClass externalDependencyObject 

@Test
public void testAddGeneralConfigCallDAOSuccess() {
    when(someDao.findMe(any(String.Class))).thenReturn(new ArrayList<String>(Arrays.asList("1234")));

    //println works here, I am able to get collection from my mocked DAO

    // Calling the actual service function
    generalConfigService.process(externalDependencyObject)
    }
}

在我的代码中是这样的:

import com.xyz.ExternalDependencyClass;

public class  GeneralConfigService{

private SomeDao someDao;

public void process(ExternalDependencyClass externalDependencyObject){

// function using Mockito 
Collection<String> result = someDao.findMe(externalDependencyObject.getId.toString())
    }
}

我还注意到 DAO 是空的,所以我这样做了(顺便提一下,我做了下面的步骤来尝试,我知道 springUnit 和 Mockito 或 xyz 之间的区别):

@Autowired
private SomeDao someDao;


@John B 解决方案解决了我的问题。但是,我想提一下对我不起作用的地方。这是我更新的单元测试

@Test
public void testAddGeneralConfigCallDAOSuccess() {
    /*
    This does not work
    externalDependencyObject.setId(new ExternalKey("pk_1"));
    // verify statement works and I thought that the class in test when call the getId 
    // it will be able to get the ExternalKey object
    //verify(externalDependencyObject.setId(new ExternalKey("pk_1")));
    */

    // This works
    when(externalDependencyObject.getId()).thenReturn(new ExternalKey("pk_1"));
    when(someDao.findMe(any(String.Class))).thenReturn(new ArrayList<String>(Arrays.asList("1234")));

    ....
    // Calling the actual service function
    generalConfigService.process(externalDependencyObject)
    }


在 :

中引用了这个问题

How do I mock external method call with Mockito

How do I set a property on a mocked object using Mockito?

最佳答案

您还没有在 externalDependencyObject 中模拟 getId 的行为,因此它返回 null 并在 toString 时给您 NPE ()null 上被调用。

你需要一个when(externalDependencyObject.getId()).then...

关于java - Mockito 空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24072579/

相关文章:

java - 读/写大文件的最简单格式

java - 添加 Junit setup/@Before 逻辑而不更改代码?

java - [apache poi xssf] :creating pivot table in new sheet(Java)

java - 枚举,增强的 for 循环

java - Tomcat & Spring Web - 找不到类异常 org.springframework.web.context.ContextLoaderListener

Spring 表单标签和 HTML 5 仍然不兼容?

java - Java/Spring 调度任务

java - Dagger 2 生成的测试组件无法识别

spring - 如何在使用 @RunWith 和 @ContextConfiguration 注释的 jUnit 测试中访问 Spring 上下文?

java - 如何使用 Spark 和 Java 来使用来自 Azure eventhub 的数据