有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java instanceOf vs sameInstance

我正在使用Mockito编写一个测试类。我有一个类,它有一个返回另一个类的方法

public BuilderClass build(){
     return AnotherClass;
}

当我使用

assertThat(BuilderClass.build(), is(instanceOf(AnotherClass.class)));

测试还可以,但是当我使用

assertThat(BuilderClass.build(), is(sameInstance(AnotherClass.class)));

测试是错误的。那么,使用instanceOf相同instance之间有什么不同呢

问候


共 (2) 个答案

  1. # 1 楼答案

    来自javadoc

    • 创建仅当检查的对象与指定的目标对象是同一实例时才匹配的匹配器

    即两个指针链接到同一内存位置

    Foo f1 = new Foo();
    Foo f2 = f1;
    assertThat(f2, is(sameInstance(f1)));
    

    以下是完整的测试:

    public class FooTest {
    
    class Foo {
    
    }
    
    private Foo f1 = new Foo();
    private Foo f2 = new Foo();
    
    /**
     * Simply checks that both f1/f2 are instances are of the same class
     */
    @Test
    public void isInstanceOf() throws Exception {
        assertThat(f1, is(instanceOf(Foo.class)));
        assertThat(f2, is(instanceOf(Foo.class)));
    }
    
    @Test
    public void notSameInstance() throws Exception {
        assertThat(f2, not(sameInstance(f1)));
    }
    
    @Test
    public void isSameInstance() throws Exception {
        Foo f3 = f1;
        assertThat(f3, is(sameInstance(f1)));
    }
    }
    
  2. # 2 楼答案

    sameInstance表示两个操作数是对同一内存位置的引用instanceOf测试第一个操作数是否确实是第二个操作数(类)的实例(对象)