autoparams-spring
스프링 애플리케이션을 테스트할 때 다음 두 가지가 모두 필요한 경우가 많습니다.
- Spring IoC 컨테이너에서 제공하는 Bean
- AutoParams에 의해 자동으로 생성된 임의의 테스트 데이터
autoparams-spring
확장은 이 두 가지 요구 사항을 연결하여 스프링에서 관리되는 빈과 AutoParams에서 생성된 인수를 나란히 수신하는 테스트 메서드를 작성할 수 있도록 해줍니다.
즉, 최소한의 설정으로 애플리케이션 컨텍스트에서 서비스 구성 요소를 자동으로 주입하는 동시에 자동으로 생성된 테스트 데이터를 사용하는 테스트를 작성할 수 있습니다.
설치하기
Maven
Maven을 사용한다면, pom.xml
에 다음 종속성을 추가하세요.
<dependency>
<groupId>io.github.autoparams</groupId>
<artifactId>autoparams-spring</artifactId>
<version>10.1.0</version>
</dependency>
Gradle (Groovy)
Gradle Groovy DSL을 사용한다면, build.gradle
에 다음 종속성을 추가하세요.
testImplementation 'io.github.autoparams:autoparams-spring:10.1.0'
Gradle (Kotlin)
Gradle Kotlin DSL을 사용한다면, build.gradle.kts
에 다음 종속성을 추가하세요.
testImplementation("io.github.autoparams:autoparams-spring:10.1.0")
@UseBeans
애너테이션
스프링 애플리케이션에 MessageSupplier
인터페이스를 구현하는 HelloSupplier
빈이 있다고 가정해 보겠습니다.
- Java
- Kotlin
public interface MessageSupplier {
String getMessage(String name);
}
interface MessageSupplier {
fun getMessage(name: String): String
}
- Java
- Kotlin
@Component
public class HelloSupplier implements MessageSupplier {
@Override
public String getMessage(String name) {
return "Hello, " + name + "!";
}
}
@Component
class HelloSupplier : MessageSupplier {
override fun getMessage(name: String): String {
return "Hello, $name!"
}
}
MessageSupplier
빈이 어떻게 동작하는지 테스트하려면 다음과 같이 @UseBeans
애너테이션을 사용할 수 있습니다.
- Java
- Kotlin
@SpringBootTest
class TestClass {
@Test
@AutoParams
@UseBeans
void testMethod(MessageSupplier service, String name) {
String message = service.getMessage(name);
assertTrue(message.startsWith("Hello"));
assertTrue(message.contains(name));
}
}
@SpringBootTest
class TestClass {
@Test
@AutoParams
@UseBeans
fun testMethod(service: MessageSupplier, name: String) {
val message: String = service.getMessage(name)
assertTrue(message.startsWith("Hello"))
assertTrue(message.contains(name))
}
}
이 테스트는 다음과 같습니다.
service
매개변수는 스프링 빈이 자동으로 주입됩니다.name
매개변수는 AutoParams에 의해 무작위로 생성됩니다.
이를 통해 실제 스프링 구성 요소를 생성된 테스트 데이터와 원활하게 결합하여 테스트를 간결하면서도 표현력 있게 만들 수 있습니다.