Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 69 additions & 0 deletions docs/features/logging-for-object-resolution.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
---
sidebar_position: 5.5
sidebar_label: Logging for Object Resolution
---

import { JavaKotlinCodeBlock, JavadocLink } from '@site/src/components/Custom';
import { version } from '../data.json';

# Logging for Object Resolution

AutoParams provides detailed logging capabilities that help you understand how objects are being resolved during test execution. The resolution log is printed to standard output during test execution, making it easy to trace how each value is generated.

For example, resolving a `User` class now produces a detailed trace. Given the following class:

<JavaKotlinCodeBlock>
```java
@AllArgsConstructor
@Getter
public class User {

private final UUID id;
private final String email;
private final String username;
}
```
</JavaKotlinCodeBlock>

Running the following code:

<JavaKotlinCodeBlock>
```java
ResolutionContext context = new ResolutionContext();
User user = context.resolve();
```
</JavaKotlinCodeBlock>

Will print a hierarchical visualization of the resolution process:

```text
▼ Resolving for: class your.app.User
├── ▼ Resolving for: interface autoparams.generator.ConstructorResolver
│ ├── ▼ Resolving for: interface autoparams.generator.ConstructorExtractor
│ │ ✓ Resolved: autoparams.generator.DefaultConstructorExtractor@3b39e79b for: interface autoparams.generator.ConstructorExtractor
│ ✓ Resolved: autoparams.generator.CompositeConstructorResolver@6dded900 for: interface autoparams.generator.ConstructorResolver
├── ▼ Resolving for: Parameter final java.lang.Long id
│ ✓ Resolved: 15775 for: Parameter final java.lang.Long id
├── ▼ Resolving for: Parameter final java.lang.String email
│ ├── ▼ Resolving for: class autoparams.generator.EmailAddressGenerationOptions
│ │ ✓ Resolved: EmailAddressGenerationOptions[domains=["test.com"]] for: class autoparams.generator.EmailAddressGenerationOptions
│ ✓ Resolved: 27b1bb70-f355-421c-8823-72fb69e9e4e7@test.com for: Parameter final java.lang.String email
├── ▼ Resolving for: Parameter final java.lang.String username
│ ✓ Resolved: username6942b0dc-da65-42ca-a756-4303fcb6328a for: Parameter final java.lang.String username
✓ Resolved: your.app.User@56835f2f for: class your.app.User
```

The log uses the following symbols to represent the resolution flow:
- `▼` indicates the start of a resolution attempt
- `├──` shows nested resolution steps
- `✓` indicates successful resolution
- Indentation levels represent the depth of the resolution chain

This logging is particularly valuable when working with:
- Customizations
- Complex object hierarchies
- Dependency injection scenarios
- Debugging test failures related to object generation
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
---
sidebar_position: 5.5
sidebar_label: 개체 해결을 위한 로깅
---

import { JavaKotlinCodeBlock, JavadocLink } from '@site/src/components/Custom';
import { version } from '../data.json';

# 개체 해결을 위한 로깅

AutoParams는 테스트 실행 중 개체가 어떻게 해결되는지 이해하는 데 도움이 되는 자세한 로그를 제공합니다. 해결 로그는 테스트 실행 중 표준 출력으로 제공되며 각 값이 어떻게 생성되는지 쉽게 추적할 수 있습니다.

`User` 클래스를 해결하면 자세한 추적 정보가 생성되는 예를 살펴보겠습니다. 다음 클래스가 주어졌을 때,

<JavaKotlinCodeBlock>
```java
@AllArgsConstructor
@Getter
public class User {

private final UUID id;
private final String email;
private final String username;
}
```
</JavaKotlinCodeBlock>

다음 코드를 실행하면,

<JavaKotlinCodeBlock>
```java
ResolutionContext context = new ResolutionContext();
User user = context.resolve();
```
</JavaKotlinCodeBlock>

해결 프로세스의 계층적 시각화를 출력합니다.

```text
▼ Resolving for: class your.app.User
├── ▼ Resolving for: interface autoparams.generator.ConstructorResolver
│ ├── ▼ Resolving for: interface autoparams.generator.ConstructorExtractor
│ │ ✓ Resolved: autoparams.generator.DefaultConstructorExtractor@3b39e79b for: interface autoparams.generator.ConstructorExtractor
│ ✓ Resolved: autoparams.generator.CompositeConstructorResolver@6dded900 for: interface autoparams.generator.ConstructorResolver
├── ▼ Resolving for: Parameter final java.lang.Long id
│ ✓ Resolved: 15775 for: Parameter final java.lang.Long id
├── ▼ Resolving for: Parameter final java.lang.String email
│ ├── ▼ Resolving for: class autoparams.generator.EmailAddressGenerationOptions
│ │ ✓ Resolved: EmailAddressGenerationOptions[domains=["test.com"]] for: class autoparams.generator.EmailAddressGenerationOptions
│ ✓ Resolved: 27b1bb70-f355-421c-8823-72fb69e9e4e7@test.com for: Parameter final java.lang.String email
├── ▼ Resolving for: Parameter final java.lang.String username
│ ✓ Resolved: username6942b0dc-da65-42ca-a756-4303fcb6328a for: Parameter final java.lang.String username
✓ Resolved: your.app.User@56835f2f for: class your.app.User
```

로그에서 다음 기호들을 사용하여 해결 흐름을 나타냅니다.
- `▼` 는 해결 시도의 시작을 나타냅니다.
- `├──` 는 중첩된 해결 단계를 표시합니다.
- `✓` 는 성공한 해결을 표시합니다.
- 들여쓰기 수준은 해결 체인의 깊이를 나타냅니다.

이 로깅은 다음과 같은 작업에서 특히 유용합니다.
- 사용자 정의
- 복잡한 개체 계층 구조
- 의존성 주입 시나리오
- 개체 생성 관련 테스트 실패 디버깅