Skip to content

Commit 3d96503

Browse files
committed
Add document of logging for object resolution
1 parent b3d83a9 commit 3d96503

File tree

2 files changed

+138
-0
lines changed

2 files changed

+138
-0
lines changed
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
---
2+
sidebar_position: 5.5
3+
sidebar_label: Logging for Object Resolution
4+
---
5+
6+
import { JavaKotlinCodeBlock, JavadocLink } from '@site/src/components/Custom';
7+
import { version } from '../data.json';
8+
9+
# Logging for Object Resolution
10+
11+
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.
12+
13+
For example, resolving a `User` class now produces a detailed trace. Given the following class:
14+
15+
<JavaKotlinCodeBlock>
16+
```java
17+
@AllArgsConstructor
18+
@Getter
19+
public class User {
20+
21+
private final UUID id;
22+
private final String email;
23+
private final String username;
24+
}
25+
```
26+
</JavaKotlinCodeBlock>
27+
28+
Running the following code:
29+
30+
<JavaKotlinCodeBlock>
31+
```java
32+
ResolutionContext context = new ResolutionContext();
33+
User user = context.resolve();
34+
```
35+
</JavaKotlinCodeBlock>
36+
37+
Will print a hierarchical visualization of the resolution process:
38+
39+
```text
40+
▼ Resolving for: class your.app.User
41+
├── ▼ Resolving for: interface autoparams.generator.ConstructorResolver
42+
│ ├── ▼ Resolving for: interface autoparams.generator.ConstructorExtractor
43+
│ │ ✓ Resolved: autoparams.generator.DefaultConstructorExtractor@3b39e79b for: interface autoparams.generator.ConstructorExtractor
44+
│ ✓ Resolved: autoparams.generator.CompositeConstructorResolver@6dded900 for: interface autoparams.generator.ConstructorResolver
45+
46+
├── ▼ Resolving for: Parameter final java.lang.Long id
47+
│ ✓ Resolved: 15775 for: Parameter final java.lang.Long id
48+
49+
├── ▼ Resolving for: Parameter final java.lang.String email
50+
│ ├── ▼ Resolving for: class autoparams.generator.EmailAddressGenerationOptions
51+
│ │ ✓ Resolved: EmailAddressGenerationOptions[domains=["test.com"]] for: class autoparams.generator.EmailAddressGenerationOptions
52+
│ ✓ Resolved: [email protected] for: Parameter final java.lang.String email
53+
54+
├── ▼ Resolving for: Parameter final java.lang.String username
55+
│ ✓ Resolved: username6942b0dc-da65-42ca-a756-4303fcb6328a for: Parameter final java.lang.String username
56+
✓ Resolved: your.app.User@56835f2f for: class your.app.User
57+
```
58+
59+
The log uses the following symbols to represent the resolution flow:
60+
- `` indicates the start of a resolution attempt
61+
- `├──` shows nested resolution steps
62+
- `` indicates successful resolution
63+
- Indentation levels represent the depth of the resolution chain
64+
65+
This logging is particularly valuable when working with:
66+
- Customizations
67+
- Complex object hierarchies
68+
- Dependency injection scenarios
69+
- Debugging test failures related to object generation
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
---
2+
sidebar_position: 5.5
3+
sidebar_label: 개체 해결을 위한 로깅
4+
---
5+
6+
import { JavaKotlinCodeBlock, JavadocLink } from '@site/src/components/Custom';
7+
import { version } from '../data.json';
8+
9+
# 개체 해결을 위한 로깅
10+
11+
AutoParams는 테스트 실행 중 개체가 어떻게 해결되는지 이해하는 데 도움이 되는 자세한 로그를 제공합니다. 해결 로그는 테스트 실행 중 표준 출력으로 제공되며 각 값이 어떻게 생성되는지 쉽게 추적할 수 있습니다.
12+
13+
`User` 클래스를 해결하면 자세한 추적 정보가 생성되는 예를 살펴보겠습니다. 다음 클래스가 주어졌을 때,
14+
15+
<JavaKotlinCodeBlock>
16+
```java
17+
@AllArgsConstructor
18+
@Getter
19+
public class User {
20+
21+
private final UUID id;
22+
private final String email;
23+
private final String username;
24+
}
25+
```
26+
</JavaKotlinCodeBlock>
27+
28+
다음 코드를 실행하면,
29+
30+
<JavaKotlinCodeBlock>
31+
```java
32+
ResolutionContext context = new ResolutionContext();
33+
User user = context.resolve();
34+
```
35+
</JavaKotlinCodeBlock>
36+
37+
해결 프로세스의 계층적 시각화를 출력합니다.
38+
39+
```text
40+
▼ Resolving for: class your.app.User
41+
├── ▼ Resolving for: interface autoparams.generator.ConstructorResolver
42+
│ ├── ▼ Resolving for: interface autoparams.generator.ConstructorExtractor
43+
│ │ ✓ Resolved: autoparams.generator.DefaultConstructorExtractor@3b39e79b for: interface autoparams.generator.ConstructorExtractor
44+
│ ✓ Resolved: autoparams.generator.CompositeConstructorResolver@6dded900 for: interface autoparams.generator.ConstructorResolver
45+
46+
├── ▼ Resolving for: Parameter final java.lang.Long id
47+
│ ✓ Resolved: 15775 for: Parameter final java.lang.Long id
48+
49+
├── ▼ Resolving for: Parameter final java.lang.String email
50+
│ ├── ▼ Resolving for: class autoparams.generator.EmailAddressGenerationOptions
51+
│ │ ✓ Resolved: EmailAddressGenerationOptions[domains=["test.com"]] for: class autoparams.generator.EmailAddressGenerationOptions
52+
│ ✓ Resolved: [email protected] for: Parameter final java.lang.String email
53+
54+
├── ▼ Resolving for: Parameter final java.lang.String username
55+
│ ✓ Resolved: username6942b0dc-da65-42ca-a756-4303fcb6328a for: Parameter final java.lang.String username
56+
✓ Resolved: your.app.User@56835f2f for: class your.app.User
57+
```
58+
59+
로그에서 다음 기호들을 사용하여 해결 흐름을 나타냅니다.
60+
- `` 는 해결 시도의 시작을 나타냅니다.
61+
- `├──` 는 중첩된 해결 단계를 표시합니다.
62+
- `` 는 성공한 해결을 표시합니다.
63+
- 들여쓰기 수준은 해결 체인의 깊이를 나타냅니다.
64+
65+
이 로깅은 다음과 같은 작업에서 특히 유용합니다.
66+
- 사용자 정의
67+
- 복잡한 개체 계층 구조
68+
- 의존성 주입 시나리오
69+
- 개체 생성 관련 테스트 실패 디버깅

0 commit comments

Comments
 (0)