개체가 특정 유형임을 주장합니다.
JUnit에서 객체가 클래스의 인스턴스라고 단정할 수 있습니까?여러 가지 이유로 테스트에서 종류를 확인하고 싶은 대상이 있습니다.Object1의 유형입니까, Object2의 유형입니까?
현재 가지고 있는 것은 다음과 같습니다.
assertTrue(myObject instanceof Object1);
assertTrue(myObject instanceof Object2);
이것은 효과가 있지만 나는 이것을 좀 더 표현하기 위한 방법이 없을까 하고 생각했다.
예를 들어 다음과 같습니다.
assertObjectIsClass(myObject, Object1);
난 할 수 있어:
assertEquals(myObject.class, Object1.getClass());
좀 더 우아하고 유동적인 방법으로 물체의 종류를 테스트할 수 있는 특별한 아사트 방법이 있나요?
를 사용할 수 있습니다.assertThat
JUnit과 함께 제공되는 Matchers를 참조하십시오.
JUnit Matchers에 대해 설명하는 이 링크를 참조하십시오.
예를 들어:
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));
}
}
부터assertThat
이전 답변은 더 이상 권장되지 않습니다. 올바른 해결책을 게시합니다.
assertTrue(objectUnderTest instanceof TargetObject);
JUnit 5용 솔루션
문서에는 다음과 같이 기재되어 있습니다.
하지만, JUnit Jupiter의 클래스는 JUnit 4의 클래스에서 볼 수 있는 햄크레스트를 받아들이는 것과 같은 방법을 제공하지 않습니다.대신, 개발자들은 서드파티 어설션 라이브러리에서 제공하는 내장 지원 기능을 사용할 것을 권장합니다.
햄크레스트의 예:
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));
}
}
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);
}
}
이것은, 다음과 같은 동작을 테스트하는 것을 전제로 하고 있습니다.instanceof
(서브클래스를 받아들입니다).만약 당신이 정확히 같은 유형을 원한다면, 나는 당신이 질문에서 말한 것처럼 두 계급이 동등하다고 주장하는 것보다 더 좋은 방법이 없다고 생각합니다.
JUnit 5 for Kotlin 솔루션!
햄크레스트의 예:
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))
}
}
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)
}
}
Kotlin용 JUnit 솔루션
나에게 효과가 있었던 것:
assert(obj is ClassName)
예시로
assert(obj is User)
메모: Assert는 다음에서 가져옵니다.AssertionsJVM.kt
파일
JUnit 5.8용 실험 솔루션
Junit 5.8에서는 실험 방법이 추가되었기 때문에 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);
}
}
언급URL : https://stackoverflow.com/questions/12404650/assert-an-object-is-a-specific-type
'IT' 카테고리의 다른 글
부동값을 C의 소수점 이후 두 자리까지만 제한하려면 어떻게 해야 합니까? (0) | 2022.11.07 |
---|---|
명시적 약속 구성 반대는 무엇이며 어떻게 피해야 합니까? (0) | 2022.11.07 |
Spring Boot에서 응답으로 JSON 개체를 반환하는 중 (0) | 2022.11.07 |
sleep()의 JavaScript 버전은 무엇입니까? (0) | 2022.11.07 |
필드 이름 주위에 백틱 사용 (0) | 2022.11.07 |