개인 메서드, 필드 또는 내부 클래스가 있는 클래스를 테스트하려면 어떻게 해야 합니까?
JUnit을 사용하여 내부 개인 메서드, 필드 또는 중첩된 클래스를 테스트하려면 어떻게 해야 합니까?
테스트를 실행할 수 있도록 메서드의 액세스 수식자를 변경하는 것은 좋지 않은 것 같습니다.
업데이트:
약 10년 후 개인 방법 또는 접근 불가능한 구성원을 테스트하는 가장 좋은 방법은 다지관 프레임워크에서 확인할 수 있습니다.
@Jailbreak Foo foo = new Foo(); // Direct, *type-safe* access to *all* foo's members foo.privateMethod(x, y, z); foo.privateField = value;
이렇게 하면 코드가 안전한 상태로 유지되고 읽을 수 있습니다.설계상의 타협도 없고 테스트를 위해 방법과 필드를 과도하게 노출시키는 일도 없습니다.
레거시 Java 응용 프로그램이 있고 메서드의 가시성을 변경할 수 없는 경우 개인 메서드를 테스트하는 가장 좋은 방법은 리플렉션을 사용하는 것입니다.
사내에서는 헬퍼를 사용하여 입수/설정하고 있습니다.private
★★★★★★★★★★★★★★★★★」private static
과 variable을 합니다.private
★★★★★★★★★★★★★★★★★」private static
필드에 된 거의 할 수 .다음 패턴을 사용하면 개인 메서드 및 필드와 관련된 거의 모든 작업을 수행할 수 있습니다., 아, 아, 아, 아, 아, 아, 아, 아, 아이다는 바꿀 수 없습니다.private static final
변수를 반영합니다.
Method method = TargetClass.getDeclaredMethod(methodName, argClasses);
method.setAccessible(true);
return method.invoke(targetObject, argObjects);
필드의 경우:
Field field = TargetClass.getDeclaredField(fieldName);
field.setAccessible(true);
field.set(object, value);
★★★★★★★
1.TargetClass.getDeclaredMethod(methodName, argClasses)
들여다볼 수 .private
방법들.같은 것이 에 적용된다.getDeclaredField
.
더 2. »setAccessible(true)
이등병들과 노는 데 필수적입니다.
개인 방법을 테스트하는 가장 좋은 방법은 다른 공용 방법을 사용하는 것입니다.이 작업을 수행할 수 없는 경우 다음 중 하나의 조건이 충족됩니다.
- 개인 메서드가 데드 코드입니다.
- 당신이 테스트하는 교실 근처에 디자인 냄새가 난다.
- 테스트하려는 방법은 비공개일 수 없습니다.
개인 메서드가 너무 복잡해서 직접 테스트해야 할 필요성을 느낄 수 있는 클래스에서 개인 메서드가 있으면 코드 냄새입니다. 내 클래스는 너무 복잡합니다.
이러한 문제에 대처하기 위한 나의 통상적인 접근법은 흥미로운 부분을 포함하는 새로운 클래스를 찾아내는 것이다.많은 경우 이 메서드와 이 메서드가 상호작용하는 필드 및 다른 메서드를 새로운 클래스로 추출할 수 있습니다.
새 클래스는 이러한 메서드를 'public'으로 표시하므로 장치 테스트를 위해 액세스할 수 있습니다.신구 모두 원교실보다 심플해졌습니다.(심플하게 하지 않으면 길을 잃습니다!)
나는 사람들이 머리를 쓰지 않고 수업을 만들 것을 제안하는 것이 아니다!여기서 중요한 것은 유닛 테스트의 힘을 사용하여 새로운 좋은 클래스를 찾는 것입니다.
저는 과거에 Java를 위해 리플리먼트를 사용한 적이 있는데, 제 생각에는 큰 실수였습니다.
엄밀히 말하면 개인 방법을 직접 테스트하는 단위 테스트를 작성해서는 안 됩니다.테스트해야 할 것은 클래스가 다른 오브젝트와 맺은 퍼블릭 계약입니다.객체의 내부 테스트에 직접 나서지 마십시오.다른 개발자가 클래스 공개 계약에 영향을 주지 않고 클래스에 대해 작은 내부 변경을 원하는 경우, 해당 개발자는 당신의 반영 기반 테스트를 수정하여 그것이 작동하는지 확인해야 합니다.프로젝트 전체에서 이 작업을 반복하면 유닛 테스트가 코드 상태를 측정하는 유용한 수단이 되지 않게 되고 개발에 방해가 되고 개발 팀에 방해가 됩니다.
대신 Cobertura와 같은 코드 커버리지 툴을 사용하여 작성한 유닛 테스트를 통해 코드를 프라이빗 방식으로 커버할 수 있도록 하는 것이 좋습니다.이렇게 하면 프라이빗 메서드의 기능을 간접적으로 테스트하여 높은 수준의 민첩성을 유지할 수 있습니다.
이 기사부터:JUnit 및 SuiteRunner(Bill Venners)를 사용한 프라이빗 메서드 테스트에는 기본적으로 다음 4가지 옵션이 있습니다.
- 개인 방법을 테스트하지 마십시오.
- 메서드 패키지 액세스 권한을 부여합니다.
- 중첩된 테스트 클래스를 사용합니다.
- 반성을 이용하다.
일반적으로 유닛 테스트는 클래스 또는 유닛의 퍼블릭인터페이스를 연습하기 위한 것입니다.따라서 개인 메서드는 명시적으로 테스트하지 않을 것으로 예상되는 구현 세부 사항입니다.
프라이빗 메서드를 테스트하는 예를 2개만 나타냅니다.
- 복호화 루틴 - 테스트를 위해 아무나 볼 수 있게 하고 싶지 않습니다.그렇지 않으면 누구나 복호화에 사용할 수 있습니다.그러나 그것들은 코드에 내재하고 복잡하고 항상 작동해야 합니다(명백한 예외는 대부분의 경우 개인 메서드조차 볼 수 있는 반영입니다).
SecurityManager
는, 이것을 방지하도록 설정되어 있지 않습니다). - 커뮤니티 사용을 위한 SDK 작성.여기서 대중은 완전히 다른 의미를 갖는다. 왜냐하면 이것은 전 세계가 볼 수 있는 코드이기 때문이다(내부뿐만 아니라).SDK 사용자에게 보이지 않게 하려면 코드를 프라이빗 메서드에 넣습니다.이것은 코드 냄새라고는 생각하지 않습니다.단, SDK 프로그래밍의 동작 방식이라고는 생각하지 않습니다.물론 개인 메서드를 테스트해야 합니다.SDK의 기능이 실제로 구현되고 있습니다.
계약서만 시험해 보자는 생각은 이해합니다.하지만 실제로 코드를 테스트하지 않는 것을 옹호할 수는 없습니다. 주행거리가 다를 수 있습니다.
따라서 보안과 SDK를 손상시키는 것이 아니라 JUnits를 복잡하게 만드는 것이 저의 트레이드오프입니다.
프라이빗 메서드는 퍼블릭메서드에 의해 호출되므로 퍼블릭메서드에 대한 입력은 이러한 퍼블릭메서드에 의해 호출되는 프라이빗메서드도 테스트해야 합니다.퍼블릭 메서드가 실패하면 프라이빗 메서드의 실패일 수 있습니다.
스프링 프레임워크에서는 다음 방법을 사용하여 개인 메서드를 테스트할 수 있습니다.
ReflectionTestUtils.invokeMethod()
예를 들어 다음과 같습니다.
ReflectionTestUtils.invokeMethod(TestClazz, "createTest", "input data");
제가 사용한 또 다른 접근법은 프라이빗 메서드를 변경하여 프라이빗 패키지 또는 보호한 후 Google Guava 라이브러리의 @VisibleForTesting 주석으로 보완하는 것입니다.
이것에 의해, 이 방법을 사용하는 모든 유저에게 주의해, 패키지로 직접 액세스 하지 말아 주세요.또한 테스트 클래스는 물리적으로 동일한 패키지에 있을 필요가 없으며 테스트 폴더 아래의 동일한 패키지에 있을 필요가 없습니다.
를 들어 이 에 있는 src/main/java/mypackage/MyClass.java
시험 을 하다, 하다, 하다, 하다, 이렇게 하면 .src/test/java/mypackage/MyClassTest.java
이렇게 하면 테스트 수업에서 테스트 방법에 액세스할 수 있습니다.
크고 기발한 클래스로 레거시 코드를 테스트하려면 현재 작성 중인 개인(또는 공용) 메서드를 테스트하는 것이 매우 유용합니다.
junitx.util을 사용합니다.Java용 PrivateAccessor-package. 개인 메서드 및 개인 필드에 액세스하기 위한 유용한 단일 행입니다.
import junitx.util.PrivateAccessor;
PrivateAccessor.setField(myObjectReference, "myCrucialButHardToReachPrivateField", myNewValue);
PrivateAccessor.invoke(myObjectReference, "privateMethodName", java.lang.Class[] parameterTypes, java.lang.Object[] args);
자바용 리플렉션을 사용한 Cem Catikkas의 솔루션을 사용해 본 결과, 이 솔루션보다 우아한 솔루션이라고 말할 수 밖에 없었습니다.그러나 리플렉션을 사용하는 대신 테스트 중인 소스에 액세스할 수 있는 방법을 찾고 있다면 이 방법을 사용할 수 있습니다.
특히 코드를 작성하기 전에 작은 테스트를 설계하고자 하는 테스트 주도의 개발에서는 클래스의 개인 메서드를 테스트하는 데 장점이 있을 수 있습니다.
프라이빗 멤버 및 메서드에 대한 접근권을 가진 테스트를 작성하면 퍼블릭 메서드에 대한 접근권만으로 특별히 타깃팅하기 어려운 코드 영역을 테스트할 수 있습니다.공개 방법이 여러 단계를 수반하는 경우, 여러 개인 방식으로 구성될 수 있으며, 그 후 개별적으로 테스트할 수 있습니다.
장점:
- 보다 세밀한 테스트 가능
단점:
- 테스트 코드는 소스 코드와 동일한 파일에 있어야 하므로 유지보수가 더 어려울 수 있습니다.
- .class 출력 파일도 마찬가지로 소스 코드에서 선언된 것과 동일한 패키지 내에 있어야 합니다.
그러나 지속적인 테스트가 이 방법을 필요로 하는 경우, 이는 민간 방법을 추출해야 한다는 신호일 수 있으며, 이는 기존의 공개적인 방법으로 테스트할 수 있다.
다음은 이 기능의 복잡한 예를 제시하겠습니다.
// Import statements and package declarations
public class ClassToTest
{
private int decrement(int toDecrement) {
toDecrement--;
return toDecrement;
}
// Constructor and the rest of the class
public static class StaticInnerTest extends TestCase
{
public StaticInnerTest(){
super();
}
public void testDecrement(){
int number = 10;
ClassToTest toTest= new ClassToTest();
int decremented = toTest.decrement(number);
assertEquals(9, decremented);
}
public static void main(String[] args) {
junit.textui.TestRunner.run(StaticInnerTest.class);
}
}
}
내부 클래스는 다음과 같이 컴파일됩니다.ClassToTest$StaticInnerTest
.
참고 항목: Java 팁 106: 재미와 이익을 위한 정적 내부 클래스
다른 사람들이 말했듯이...개인 방법을 직접 테스트하지 마십시오.여기 몇 가지 생각이 있습니다.
- 모든 방법을 소규모로 집중 관리(테스트가 용이하고 문제 발견이 용이함)
- 코드 커버리지툴을 사용합니다.나는 Cobertura를 좋아해(오 해피데이, 새로운 버전이 나온 것 같아!)
유닛 테스트에서 코드 적용 범위를 실행합니다.메서드가 완전히 테스트되지 않은 경우 테스트에 추가하여 커버리지를 높입니다.코드 커버율을 100%로 하는 것을 목표로 합니다만, 실현하지 못할 가능성이 있습니다.
개인 방식은 공공 방식에 의해 소비된다.그렇지 않으면 암호는 무효야따라서 퍼블릭 메서드를 테스트하고 퍼블릭 메서드의 예상되는 결과를 제시하여 퍼블릭 메서드가 소비하는 프라이빗 메서드를 테스트합니다.
프라이빗 메서드 테스트는 퍼블릭 메서드에서 유닛테스트를 실행하기 전에 디버깅을 통해 테스트해야 합니다.
테스트 주도의 개발을 사용하여 디버깅할 수도 있으며, 모든 어설션이 충족될 때까지 유닛테스트를 디버깅할 수도 있습니다.
개인적으로는 TDD를 사용하여 클래스를 만드는 것이 좋다고 생각합니다.퍼블릭 메서드 스탭을 만들고 사전에 정의된 모든 어사션을 사용하여 유닛 테스트를 생성하기 때문에 메서드의 예상 결과는 코드화 전에 결정됩니다.이렇게 하면 단위 검정 주장이 결과에 적합하도록 하는 잘못된 방법을 택하지 않습니다.그러면 클래스가 견고해지고 모든 유닛 테스트에 합격하면 요구 사항을 충족할 수 있습니다.
스프링을 사용하는 경우 반사Test Utils는 최소한의 노력으로 도움이 되는 편리한 도구를 제공합니다.예를 들어 바람직하지 않은 퍼블릭세터를 추가하지 않고 프라이빗멤버에 모크를 설정하려면 다음 절차를 수행합니다.
ReflectionTestUtils.setField(theClass, "theUnsettableField", theMockObject);
변경을 꺼리거나 변경할 수 없는 기존 코드를 테스트하려는 경우 반사가 좋습니다.
클래스 설계가 여전히 유연하고 개별적으로 테스트하고 싶은 복잡한 개인 방법이 있다면 다른 클래스로 분리하여 해당 클래스를 개별적으로 테스트하는 것이 좋습니다.원래 클래스의 퍼블릭인터페이스를 변경할 필요는 없습니다.내부에서 도우미 클래스의 인스턴스를 생성하여 도우미 메서드를 호출할 수 있습니다.
도우미 메서드에서 발생하는 어려운 오류 조건을 테스트하려면 한 단계 더 진행하십시오.도우미 클래스에서 인터페이스를 추출하여 원래 클래스에 퍼블릭게터 및 세터를 추가하여 도우미 클래스를 주입(인터페이스를 통해 사용)한 후 원래 클래스에 도우미 클래스의 모의 버전을 주입하여 원래 클래스가 도우미로부터의 예외에 어떻게 응답하는지 테스트합니다.이 방법은 도우미 클래스를 테스트하지 않고 원래 클래스를 테스트하는 경우에도 유용합니다.
프라이빗 메서드를 테스트하면 내부 구현을 변경할 때마다 클라이언트코드(이 경우 테스트)가 해제되기 때문에 클래스의 캡슐화가 해제됩니다.
그러니 사적인 방법을 시험하지 마세요.
하지만 꼭 그래야 한다면...
JDK 1.3 이후를 사용하고 있는 경우 리플렉션을 사용하여 특권 접근컨트롤 메커니즘을 전복시킬 수 있습니다.사용 방법에 대한 자세한 내용은 이 문서를 참조하십시오.
JDK 1.6 이상을 사용하고 @Test로 테스트에 주석을 다는 경우 Dp4j를 사용하여 테스트 방법에 반사를 주입할 수 있습니다.사용 방법에 대한 자세한 내용은 이 테스트 스크립트를 참조하십시오.
추신, 저는 Dp4j의 주공입니다. 도움이 필요하시면 말씀하세요.:)
코드를 변경할 수 없는 레거시 응용 프로그램의 개인 메서드를 테스트하려면 Java의 한 가지 옵션은 jMockit입니다. jMockit을 사용하면 클래스에 개인인 경우에도 개체에 대한 mock을 만들 수 있습니다.
나는 사적인 방법을 테스트하지 않는 경향이 있다.거기엔 광기가 있다.개인적으로는 공개적으로 노출된 인터페이스(보호된 방법과 내부 방식 포함)만 테스트해야 한다고 생각합니다.
JUnit을 사용하시는 분들은 Junit Addons를 보시기 바랍니다.Java 보안 모델을 무시하고 개인 메서드와 속성에 액세스할 수 있습니다.
코드를 조금 수정해 보시길 권합니다.코드를 테스트하는 것만으로 반사나 다른 것을 사용할 생각을 하게 되면, 코드에 뭔가 문제가 있는 것입니다.
당신은 여러 가지 문제를 언급했습니다.개인 필드부터 시작합시다.개인 필드의 경우 새 생성자를 추가하고 여기에 필드를 주입합니다.이것 대신:
public class ClassToTest {
private final String first = "first";
private final List<String> second = new ArrayList<>();
...
}
난 이걸 썼을 거야
public class ClassToTest {
private final String first;
private final List<String> second;
public ClassToTest() {
this("first", new ArrayList<>());
}
public ClassToTest(final String first, final List<String> second) {
this.first = first;
this.second = second;
}
...
}
레거시 코드가 있더라도 문제가 되지 않습니다.오래된 코드는 빈 컨스트럭터를 사용하고 있기 때문에 리팩터링된 코드는 더 깨끗해 보이고, 테스트에서 필요한 값을 반영하지 않고 주입할 수 있습니다.
이제 사적인 방법에 대해 알아보겠습니다.제 개인적인 경험상, 테스트를 위해 개인 메서드를 스텁해야 하는 경우, 그 메서드는 그 클래스에서는 아무런 관계가 없습니다.이 경우 일반적인 패턴은 인터페이스 내에서 랩하는 것입니다.Callable
그런 다음 컨스트럭터에도 해당 인터페이스를 전달합니다(복수 컨스트럭터 트릭 사용).
public ClassToTest() {
this(...);
}
public ClassToTest(final Callable<T> privateMethodLogic) {
this.privateMethodLogic = privateMethodLogic;
}
내가 쓴 건 대부분 의존성 주입 패턴으로 보여제 개인적인 경험으로는 테스트 중에 매우 유용하고, 이런 종류의 코드가 더 깨끗하고 유지보수가 더 쉽다고 생각합니다.중첩된 수업에 대해서도 같은 말을 할 수 있습니다.중첩된 클래스에 무거운 로직이 포함되어 있는 경우 패키지 개인 클래스로 이동하여 필요한 클래스에 삽입하는 것이 좋습니다.
레거시 코드를 리팩터링 및 유지보수하면서 사용한 디자인 패턴도 몇 가지 있지만, 모두 테스트하는 코드의 케이스에 따라 다릅니다.리플렉션을 사용하는 것은 대부분 문제가 되지 않습니다.그러나 엔터프라이즈 어플리케이션에서는 엄격한 테스트를 거치고 모든 도입에 앞서 테스트를 실행하면 모든 것이 매우 느려집니다(그냥 귀찮을 뿐이고 저는 그런 것을 좋아하지 않습니다).
세터 주사도 있습니다만, 사용을 추천하고 싶지는 않습니다.저는 건설업자와 함께 모든 것을 필요한 때에 초기화하는 것이 좋습니다.필요한 의존성을 주입할 수 있는 가능성을 남겨두겠습니다.
Power Mockito는 이를 위해 제작되었습니다.maven 의존 관계 사용
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-core</artifactId>
<version>2.0.7</version>
<scope>test</scope>
</dependency>
그럼 넌 할 수 있어
import org.powermock.reflect.Whitebox;
...
MyClass sut = new MyClass();
SomeType rval = Whitebox.invokeMethod(sut, "myPrivateMethod", params, moreParams);
예에 대해서는, 이하를 참조해 주세요.
다음 Import 스테이트먼트를 추가해야 합니다.
import org.powermock.reflect.Whitebox;
이제 다음과 같이 개인 메서드, 호출할 메서드 이름 및 추가 매개 변수가 있는 개체를 직접 전달할 수 있습니다.
Whitebox.invokeMethod(obj, "privateMethod", "param1");
개인 필드를 테스트하는 일반적인 기능은 다음과 같습니다.
protected <F> F getPrivateField(String fieldName, Object obj)
throws NoSuchFieldException, IllegalAccessException {
Field field =
obj.getClass().getDeclaredField(fieldName);
field.setAccessible(true);
return (F)field.get(obj);
}
개인 메서드는 동일한 클래스 내에서만 액세스해야 합니다.따라서 어떤 테스트클래스에서든 타깃클래스의 "프라이빗" 메서드를 테스트하는 방법은 없습니다.방법으로는 수동으로 장치 테스트를 수행하거나 방법을 "개인"에서 "보호"로 변경할 수 있습니다.
그런 다음 클래스가 정의된 동일한 패키지 내에서만 보호된 메서드에 액세스할 수 있습니다.따라서 타깃 클래스의 보호된 메서드를 테스트한다는 것은 타깃 클래스와 동일한 패키지에 테스트 클래스를 정의해야 한다는 것을 의미합니다.
위의 모든 것이 요건에 적합하지 않은 경우 리플렉션 방법을 사용하여 개인 메서드에 액세스합니다.
위에서 설명한 바와 같이 퍼블릭인터페이스를 통해 테스트하는 것도 좋은 방법입니다.
이 경우 코드 적용 범위 도구(Emma 등)를 사용하여 개인 방법이 실제로 테스트에서 실행되고 있는지 확인하는 것이 좋습니다.
오늘은 개인 메서드와 필드 테스트를 지원하기 위해 Java 라이브러리를 푸시했습니다.안드로이드를 염두에 두고 설계되었지만, 어떤 자바 프로젝트에서도 사용할 수 있습니다.
개인 메서드나 필드 또는 생성자를 사용하는 코드가 있는 경우 BoundBox를 사용할 수 있습니다.그것은 당신이 찾고 있는 것을 정확히 해낸다.다음은 Android 활동의 두 개인 필드에 액세스하여 테스트하는 테스트의 예입니다.
@UiThreadTest
public void testCompute() {
// Given
boundBoxOfMainActivity = new BoundBoxOfMainActivity(getActivity());
// When
boundBoxOfMainActivity.boundBox_getButtonMain().performClick();
// Then
assertEquals("42", boundBoxOfMainActivity.boundBox_getTextViewMain().getText());
}
BoundBox를 사용하면 개인/보호 필드, 메서드 및 생성자를 쉽게 테스트할 수 있습니다.상속으로 인해 숨겨진 항목에 액세스할 수도 있습니다.실제로 BoundBox는 캡슐화를 파괴합니다.반영을 통해 이 모든 것에 액세스할 수 있지만 모든 것은 컴파일 시 확인됩니다.
일부 레거시 코드를 테스트하는 데 이상적입니다.조심해서 사용하세요.;)
https://github.com/stephanenicolas/boundbox
먼저 이 질문을 던져보겠습니다.개인 구성원이 격리된 테스트가 필요한 이유는 무엇입니까?공공장소에서 테스트해야 할 정도로 복잡한 동작을 제공하는 것이 그렇게 복잡한가요?유닛 테스트이지 코드 라인 테스트가 아닙니다.사소한 일에 신경 쓰지 마세요.
만약 그들이 이 개인 구성원들이 각각 복잡성이 큰 '단위'일 정도로 크고 크다면, 그러한 개인 구성원들은 이 클래스에서 제외하는 것을 고려해보세요.
리팩터링이 부적절하거나 불가능한 경우 유닛 테스트 중에 이러한 프라이빗 멤버 기능/멤버 클래스에 대한 액세스를 대체하기 위해 전략 패턴을 사용할 수 있습니까?유닛 테스트에서는 이 전략에 의해 검증이 추가되지만 릴리스 빌드에서는 단순한 패스스루입니다.
저는 최근에 이 문제를 겪었고 Picklock이라는 작은 툴을 썼습니다.이 툴은 Java reflection API를 명시적으로 사용하는 문제를 회피하는 것입니다.다음 두 가지 예입니다.
호출 방식, 예를 들어private void method(String s)
- Java reflection에 의한
Method method = targetClass.getDeclaredMethod("method", String.class);
method.setAccessible(true);
return method.invoke(targetObject, "mystring");
호출 방식, 예를 들어private void method(String s)
- 픽록
interface Accessible {
void method(String s);
}
...
Accessible a = ObjectAccess.unlock(targetObject).features(Accessible.class);
a.method("mystring");
필드 설정(예:private BigInteger amount;
- Java reflection에 의한
Field field = targetClass.getDeclaredField("amount");
field.setAccessible(true);
field.set(object, BigInteger.valueOf(42));
필드 설정(예:private BigInteger amount;
- 픽록
interface Accessible {
void setAmount(BigInteger amount);
}
...
Accessible a = ObjectAccess.unlock(targetObject).features(Accessible.class);
a.setAmount(BigInteger.valueOf(42));
언급URL : https://stackoverflow.com/questions/34571/how-do-i-test-a-class-that-has-private-methods-fields-or-inner-classes
'programing' 카테고리의 다른 글
DEX를 Java 소스 코드로 디컴파일 (0) | 2022.07.21 |
---|---|
stdin이 단자인지 파이프인지 검출할 수 있습니까? (0) | 2022.07.21 |
Vuetify.js - 동적 카드 높이 애니메이션 (0) | 2022.07.21 |
열거값을 int로 변환하는 방법 (0) | 2022.07.21 |
Java Regex의 matches()와 find()의 차이 (0) | 2022.07.20 |