断言对象是特定类型

新手上路,请多包涵

在 JUnit 中是否可以断言一个对象是一个类的实例?由于各种原因,我在测试中有一个对象要检查其类型。是Object1的类型还是Object2的类型?

目前我有:

 assertTrue(myObject instanceof Object1);
assertTrue(myObject instanceof Object2);

这行得通,但我想知道是否有一种更具表现力的方式来做到这一点。

例如:

 assertObjectIsClass(myObject, Object1);

我可以这样做:

 assertEquals(myObject.class, Object1.getClass());

是否有特定的 assert 方法允许我以更优雅、更流畅的方式测试对象的类型?

原文由 RNJ 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 425
2 个回答

可以使用 assertThat 方法和JUnit自带的Matchers。

看看 这个链接,它描述了一些关于 JUnit 匹配器的信息。

例子:

 public class BaseClass {
}

public class SubClass extends BaseClass {
}

测试:

 import org.junit.Test;

import static org.hamcrest.CoreMatchers.instanceOf;
import static org.junit.Assert.assertThat;

/**
 * @author maba, 2012-09-13
 */
public class InstanceOfTest {

    @Test
    public void testInstanceOf() {
        SubClass subClass = new SubClass();
        assertThat(subClass, instanceOf(BaseClass.class));
    }
}

原文由 maba 发布,翻译遵循 CC BY-SA 3.0 许可协议

由于旧答案 assertThat 现在已弃用,我发布了正确的解决方案:

assertTrue(objectUnderTest instanceof TargetObject);

原文由 Carmageddon 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题