当前位置: 首页 > 知识库问答 >
问题:

我该如何使用“返回”来上课?

伍皓
2023-03-14

这是一个非常新手的问题,但我不知道如何解决这个问题。

我必须模拟这样返回Class的方法。

public Class<? extends SomeClass> getAClass();

如果我做这样的事

when(this.someInstance.getAClass())
    .thenReturn(SomeClassThatExtendsSomeClass.class);

我得到编译错误。

The method thenReturn(Class<capture#1-of ? extends SomeClass>) in the type OngoingStubbing<Class<capture#1-of ? extends SomeClass>> is not applicable for the arguments (Class<SomeClassThatExtendsSomeClass>)

共有3个答案

巫马星雨
2023-03-14

尝试键入方法

public <T extends SomeClass> Class<T> getAClass();

when(this.someInstance.getAClass())
    .thenReturn(SomeClassThatExtendsSomeClass.class);
厍兴腾
2023-03-14

如果无法更改方法声明,使其能够使用然后返回,则可以使用然后回答

when(this.someInstance.getAClass()).thenAnswer(new Answer<Class<? extends SomeClass>>() {
            @Override
            public Class<? extends SomeClass> answer(InvocationOnMock invocation) throws Throwable {
                return SomeClassThatExtendsSomeClass.class;
            }
});

虽然仅仅为了返回一个固定值而实现Answer并不理想,但这应该适用于您的场景。

董子航
2023-03-14

如果方法声明可以更改为上面@Bohemian建议的内容,

public <T extends SomeClass> Class<T> getAClass();

然后你可以写你的模拟陈述如下:

when(this.someInstance.<SomeClassThatExtendsSomeClass>getAClass())
     .thenReturn(SomeClassThatExtendsSomeClass.class);

否则,应按如下方式使用doReturn语义:

Mockito
    .doReturn(SomeClassThatExtendsSomeClass.class)
    .when(this.someInstance.<SomeClassThatExtendsSomeClass>getAClass());
 类似资料:
  • 问题内容: 当用Java编程时,我几乎总是出于习惯,编写如下代码: 大多数时候甚至都没有考虑它。现在,问题是:我应该 始终 将接口指定为返回类型吗?还是建议使用接口的实际实现,如果是,在什么情况下使用? 显然,使用该接口有很多优点(这就是为什么它存在的原因)。在大多数情况下,库函数使用哪种具体实现并不重要。但也许在某些情况下确实很重要。例如,如果我知道我将主要随机访问列表中的数据,那将是一个坏习惯

  • 问题内容: 我发现自己同意返回接口而不是具体的类。 原因很简单,我要松散耦合。 但是还会有其他影响或权衡吗? 问题答案: 对于List或ArrayList之类的类型,不应进行任何编译,并且应将List提升Code返回到接口。 如果这是通过诸如CopyOnWriteArrayList之类的并发包进行的,并且您使用的是addIfAbsent之类的方法(未在List接口中定义),您将发现自己受到限制。

  • 我发现自己同意返回一个接口,而不是一个具体的类。

  • 有没有一种聪明的方法可以回到Angular 2的最后一页? 像这样的东西 例如,C页有一个返回按钮, > A页- 第B页- 路由器是否有此历史信息?

  • 假设我有一个方法将只读视图返回到成员列表中: 进一步假设客户机所做的只是立即对列表进行一次迭代。也许是为了把玩家放进一个JList或者别的什么。客户端没有存储对列表的引用以供以后检查! 对于这种常见的场景,我是否应该返回一个流呢? 还是返回流在Java中不是惯用的?流被设计成总是在创建它们的同一个表达式中“终止”吗?