RNJ*_*RNJ 176 java junit unit-testing
在JUnit中是否有可能断言一个对象是一个类的实例?由于各种原因,我在测试中有一个对象,我想检查其类型.它是Object1的类型还是Object2的类型?
目前我有:
assertTrue(myObject instanceof Object1);
assertTrue(myObject instanceof Object2);
Run Code Online (Sandbox Code Playgroud)
这有效,但我想知道是否有更有表现力的方式来做到这一点.
例如:
assertObjectIsClass(myObject, Object1);
Run Code Online (Sandbox Code Playgroud)
我能做到这一点:
assertEquals(myObject.class, Object1.getClass());
Run Code Online (Sandbox Code Playgroud)
是否有一个特定的断言方法,允许我以更优雅,流畅的方式测试对象的类型?
mab*_*aba 228
您可以使用assertThatJUnit附带的方法和Matchers.
看一下这个描述JUnit Matchers的链接.
例:
public class BaseClass {
}
public class SubClass extends BaseClass {
}
Run Code Online (Sandbox Code Playgroud)
测试:
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));
}
}
Run Code Online (Sandbox Code Playgroud)
Car*_*don 32
既然assertThat旧答案现已弃用,我发布了正确的解决方案:
assertTrue(objectUnderTest instanceof TargetObject);
Fra*_* Yu 18
文件说:
但是,JUnit Jupiter的
org.junit.jupiter.Assertions类没有提供assertThat()类似JUnit 4org.junit.Assert类中接受Hamcrest的方法Matcher.相反,鼓励开发人员使用第三方断言库提供的对匹配器的内置支持.
Hamcrest的例子:
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.MatcherAssert.assertThat;
import org.junit.jupiter.api.Test;
class HamcrestAssertionDemo {
@Test
void assertWithHamcrestMatcher() {
SubClass subClass = new SubClass();
assertThat(subClass, instanceOf(BaseClass.class));
}
}
Run Code Online (Sandbox Code Playgroud)
AssertJ的示例:
import static org.assertj.core.api.Assertions.assertThat;
import org.junit.jupiter.api.Test;
class AssertJDemo {
@Test
void assertWithAssertJ() {
SubClass subClass = new SubClass();
assertThat(subClass).isInstanceOf(BaseClass.class);
}
}
Run Code Online (Sandbox Code Playgroud)
gla*_*3dr 10
在JUnit 5.8中,添加了实验 assertInstanceOf()方法,因此您不再需要Hamcrest或AssertJ。现在的解决方案很简单:
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
import org.junit.Test;
public class InstanceOfTest {
@Test
public void testInstanceOf() {
SubClass subClass = new SubClass();
assertInstanceOf(BaseClass.class, subClass);
}
}
Run Code Online (Sandbox Code Playgroud)
对我有用的:
assert(obj is ClassName)
Run Code Online (Sandbox Code Playgroud)
例如
assert(obj is User)
Run Code Online (Sandbox Code Playgroud)
注意:断言来自AssertionsJVM.kt文件
Hamcrest示例:
import org.hamcrest.CoreMatchers
import org.hamcrest.MatcherAssert
import org.junit.jupiter.api.Test
class HamcrestAssertionDemo {
@Test
fun assertWithHamcrestMatcher() {
val subClass = SubClass()
MatcherAssert.assertThat(subClass, CoreMatchers.instanceOf<Any>(BaseClass::class.java))
}
}
Run Code Online (Sandbox Code Playgroud)
AssertJ示例:
import org.assertj.core.api.Assertions.assertThat
import org.junit.jupiter.api.Test
class AssertJDemo {
@Test
fun assertWithAssertJ() {
val subClass = SubClass()
assertThat(subClass).isInstanceOf(BaseClass::class.java)
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
152823 次 |
| 最近记录: |