【问题标题】:Mockito NullPointerExceptionMockito NullPointerException
【发布时间】:2014-07-27 04:16:01
【问题描述】:

我遵循了@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?

【问题讨论】:

  • 你为什么要嘲笑你正在自动装配的东西?它闻起来应该是纯 Spring 风格的集成测试,或者纯模拟测试。
  • 我尝试执行@Autowired 步骤,因为我遇到了 NullPointer 异常,但即使在那之后它也遇到了异常。我看到当someDao.findMe(someObject.getId.toString()) 执行它不会触发我的MockDao 返回语句,而是尝试评估someObject.getId.toString()。当我在someDao.findMe 的测试中执行 println 时,它确实返回了集合。我还检查了调试,someDao 已经将属性设置为 generalConfigService。所以不知道为什么它正在评估而不是仅仅返回我的收藏

标签: java spring junit mockito


【解决方案1】:

您没有嘲笑getIdexternalDependencyObject 中的行为,因此它返回null 并在toString() 调用null 时为您提供NPE。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    相关资源
    最近更新 更多