【问题标题】:check that method returns instance of corresponding class检查方法是否返回相应类的实例
【发布时间】:2018-10-24 08:16:50
【问题描述】:

我有一个创建新对象的简单方法(实际上它创建了相当复杂的对象)

class MyClass {
    public MyObject create() { return new MyObject(); }
}

我想测试在create 调用它返回MyObject 的实例。 如何使用mockito 做到这一点?

public MyClassTest {
    @Mock
    private MyClass myClassMock;

    @Test
    public void testCreate() {
        ???
    }

【问题讨论】:

    标签: java mockito junit5


    【解决方案1】:

    没有必要用像 Java 这样的静态类型语言来测试它。如果它编译,它总是创建一个MyObject 的实例,因为这是返回类型声明的内容。

    如果出于某种原因您确实想在运行时检查类型(可能是因为您想检查比类型系统当时提供的更严格的标准),则可以使用 instanceof 关键字或 Class::isInstance()

    【讨论】:

      【解决方案2】:

      试试这个:

      if (create() instanceof MyObject ) {
         // ...
      }
      

      【讨论】:

        【解决方案3】:

        虽然没有真正需要测试这种行为,但您可以执行以下操作:

        import org.junit.Test;
        
        import static org.hamcrest.CoreMatchers.instanceOf;
        import static org.junit.Assert.assertThat;
        
        public MyClassTest {
        
            @Test
            public void testCreate() {
                MyClass myClass = new MyClass();
                assertThat(myClass.create(), instanceOf(MyObject.class));
            }
        }
        

        更多关于所用 Matcher 的信息:http://hamcrest.org/JavaHamcrest/javadoc/1.3/org/hamcrest/CoreMatchers.html#instanceOf(java.lang.Class)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-06-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-05-23
          • 2012-02-10
          • 2018-09-29
          • 2014-04-24
          相关资源
          最近更新 更多