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

对作为一个类的实例的字段使用Mock

池兴邦
2023-03-14
public class Sender {
    private final SomeClass firstField;
    private final SomeClass secondField;
    private Sender(SomeClass firtsField, SomeClass secondField){
        this.firstField = firstField;
        this.secondField = secondField;
    }
}

@RunWith(MockitoJUnitRunner.class)
public class SenderTest{
    @Mock
    private firstField;
    @Mock
    private secondField;
}

所有东西看起来都是等级的,但看起来像是在两个领域注入了相同的对象或类似这样的东西。当我试图为一个字段使用When(..).thenreturn()时,它设置了两个数据,另一个数据和vise verse;最奇怪的是,它在调试模式下运行良好。你能说什么?

共有1个答案

濮阳耀
2023-03-14

Mockito在构造函数注入两个或多个相同类型的字段时存在一些问题。但如果你使用setter注射,它就会工作得很好。

因此您可以像这样重构“sender”类:

    public class Sender {
        private SomeClass firstField;
        private SomeClass secondField;
        public void setFirstField(SomeClass firstField) {
            this.firstField = firstField;
        }
        public void setSecondField(SomeClass secondField) {
            this.secondField= secondField;
        }
    }

请记住,如果类同时具有构造函数和setters,则Mockito将选择用于注入的构造函数,而完全忽略setters。

public class SenderTest {

    private SomeClass firstField;
    private SomeClass secondField;

    private Sender sender;

    @Before
    public void setUp() {
        firstField = Mockito.mock(SomeClass.class);
        secondField = Mockito.mock(SomeClass.class);

        sender = new Sender(firstField, secondField);
    }

    @Test
    public void smokeTest() {

    }
}
 类似资料:
  • 问题内容: 我是Hibernate的新手,必须支持使用Hibernate的现有应用程序。这是一个纯报表应用程序-无需插入/更新/删除-仅选择 我可以看到在同一类的多个字段中使用了@Id注释的现有POJO对象 我的理解是,对于复合主键-您需要使用@Embeddable和@EmbeddedId 但是,这没有在我的课程中定义,奇怪的是代码可以编译并正常运行 这是我的代码的示例: 在pojo中还有更多字段

  • 问题内容: 代码: 问题: 为什么Java允许执行以上代码,而C ++不允许执行? 上面的代码是否创建了无数个对象?由于本身包含一个对象,而该对象又包含一个本身具有对象的对象,依此类推。 问题答案: 两种语言之间关于您的问题的主要区别是Java是具有引用语义的语言(原始类型除外),而C ++是具有值语义的语言,该值允许通过引用和指针进行引用语义。 在两种语言中看起来 相似的 语法具有完全不同的含义

  • 我有这个问题。但我很难解释,因为我不知道确切的术语。希望有人能理解。我会尽力描述。我觉得这与

  • 问题内容: 这是相关的查询。 我有一个包含三列的表:在MS Access中。(实际表很大,但是下面的示例仅供参考)!http://postimg.org/image/bx0grwoa3/ 现在,我想获得以下类型的查询输出:获取每个唯一名称的最小季度值。例如: !http://postimg.org/image/je1w7gdi1/ 到目前为止,通过使用以下命令,我可以通过硬编码标准获得四分之一的输

  • 对于此示例: 如何检查 是否是 Foo 的实例(但不是其 foo 子类的实例)?那是: checkInstance(qux,Foo.class)=true checkInstance(qux,Bar.class)=false 有没有类似于< code>instanceof的语句来进行这种检查?或者我应该使用< code>qux.getClass()。equals(Foo.class)

  • 对不起,如果这是一个微不足道的问题,我是新的指南。假设我有下面这个类: 然后在其他地方我想做: 我希望有两个“MyClass”实例,一个名为“foo ”,一个名为“bar ”(也就是说,它们中的每一个都有一个不同的依赖实例)。我如何将这两个实例添加到我的注入器中,如何用“injector.getInstance”检索它们中的每一个? 我不想为每个可能的依赖项创建一个“MyClass”的子类。 谢谢