首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在testNG模拟中引用不同的参数时

在testNG模拟中引用不同的参数时
EN

Stack Overflow用户
提问于 2018-04-10 08:45:31
回答 1查看 27关注 0票数 0

我在ReferenceConceptServiceImpl类中有一个测试类,我在这里使用了模拟。

代码语言:javascript
复制
@Resource
  private ReferenceConceptDTOMapper referenceConceptDtoMapper;

@Resource
  private TerminologyDefinitionDTOMapper definitionDTOMapper;

    public ReferenceConceptDTO getConceptByTerminologyAndId(final TerminologyDefinitionDTO terminology,
                                                              final String conceptId)
      {
        TerminologyDefinition terminologyDefinition = definitionDTOMapper.load(terminology);
        final ReferenceConcept findRefernaceConceptsByTermAndId = getDAO()
            .findReferenceConceptByTermAndId(terminologyDefinition, conceptId);

        return referenceConceptDtoMapper.convert(findRefernaceConceptsByTermAndId);
      }

我们班的构造函数是:

代码语言:javascript
复制
public ReferenceConceptServiceImpl(final se.cambio.concept.terminology.dto.spi.ReferenceConceptEntityDTOMapper<D> mapper,
                                     final se.cambio.concept.terminology.dto.spi.ReferenceConceptMutableEntityDTOMapper<MD> mutableMapper,
                                     final se.cambio.concept.terminology.persistence.ReferenceConceptDAO dao)
  {
    super(mapper, mutableMapper, dao);
  }

我还添加了包含可测试类bean及其依赖项的xml文件。此外,我还向测试类添加了所需的依赖项,并尝试在method.It上进行测试,如下所示:

代码语言:javascript
复制
@Test
  public void testGetConceptByTerminologyAndId()
  {
    String conceptId = "test_Concept";
    when(definitionDTOMapper.load(getTerminologyDefinitionDTO())).thenReturn(getTerminologyDefinition());
    when(referenceConceptServiceImpl.getDAO()).thenReturn(mockReferenceConceptDAO);
    when(mockReferenceConceptDAO.findReferenceConceptByTermAndId(getTerminologyDefinition(), conceptId))
        .thenReturn(getReferenceConcept());
    when(referenceConceptDtoMapper.convert(getReferenceConcept())).thenReturn(getReferenceConceptDTO());
    ReferenceConceptDTO actualOutput = referenceConceptServiceImpl .getConceptByTerminologyAndId(getTerminologyDefinitionDTO(), conceptId);
    assertEquals(actualOutput, getReferenceConceptDTO());
  }

这里,所有的getter方法都有数据。我的问题是,在调用getDAO()方法之后,它返回DAO类型的对象。因此,我试图通过获取findReferenceConceptByTermAndId()的输出来调用getDAO()。

问题就在那条线上。

when(referenceConceptServiceImpl.getDAO()).thenReturn(mockReferenceConceptDAO);

错误是:

代码语言:javascript
复制
org.mockito.exceptions.misusing.MissingMethodInvocationException: 
when() requires an argument which has to be 'a method call on a mock'.
For example:
    when(mock.getArticles()).thenReturn(articles);

Also, this error might show up because:
1. you stub either of: final/private/equals()/hashCode() methods.
   Those methods *cannot* be stubbed/verified.
2. inside when() you don't call method on mock but on some other object.
3. the parent of the mocked class is not public.
   It is a limitation of the mock engine.

有人能解决我的问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-11 08:06:10

我自己找到了一个解决方案,我把它发到这里;

我在这里所做的是添加以下代码:

代码语言:javascript
复制
when(referenceConceptServiceImpl.getDAO()findReferenceConceptByTermAndId(getTerminologyDefinition(), conceptId)).thenReturn(getReferenceConcept());

按以下两行分列:

代码语言:javascript
复制
 when(referenceConceptServiceImpl.getDAO()).thenReturn(mockReferenceConceptDAO);
    when(mockReferenceConceptDAO.findReferenceConceptByTermAndId(getTerminologyDefinition(), conceptId))
        .thenReturn(getReferenceConcept());
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49749214

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档