Dummy Objects#
테스트 과정에서 실제로는 사용되지 않지만 메서드의 파라미터를 채우기 위해 전달되는 객체
Dummy Objects는 Test Double 기법 중 하나로, 테스트에 필요하지만 실제로 사용되지 않는 객체를 의미합니다.
- 테스트 대상 코드의 인터페이스 요구사항을 충족시키기 위해 사용된다.
- 테스트 실행을 위해 필요하지만 테스트 자체와는 관련이 없는 객체를 대체한다.
- 테스트 코드를 단순화하고 가독성을 높인다.
- 불필요한 객체 생성을 피해 테스트 성능을 향상시킨다.
- 테스트 대상 코드를 외부 의존성으로부터 격리시킨다.
- 실제 객체의 동작을 정확히 반영하지 않을 수 있다.
- 과도한 사용 시 테스트의 현실성이 떨어질 수 있다.
Python#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
| # 실제 이메일 서비스 클래스
class EmailService:
def __init__(self, smtp_server, port):
self.smtp_server = smtp_server
self.port = port
def send_notification(self, user, message):
# 실제로는 이메일을 보내는 복잡한 로직이 있을 것입니다
print(f"Sending email to {user.email}: {message}")
# 사용자 클래스
class User:
def __init__(self, name, email, notification_service):
self.name = name
self.email = email
self.notification_service = notification_service
def notify_login(self):
self.notification_service.send_notification(
self,
f"New login detected for {self.name}"
)
# Dummy 객체
class DummyEmailService:
def __init__(self, smtp_server=None, port=None):
pass # 아무것도 하지 않음
def send_notification(self, user, message):
pass # 아무것도 하지 않음
# 테스트 코드
def test_user_creation():
# Dummy 이메일 서비스 사용
dummy_email_service = DummyEmailService()
# 실제로 테스트하고 싶은 것은 사용자 생성 로직입니다
user = User("John Doe", "john@example.com", dummy_email_service)
assert user.name == "John Doe"
assert user.email == "john@example.com"
|
JavaScript#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
| // 실제 로깅 서비스 클래스
class LoggerService {
constructor(logLevel) {
this.logLevel = logLevel;
}
log(message) {
// 실제로는 로그를 저장하는 복잡한 로직이 있을 것입니다
console.log(`[${this.logLevel}] ${message}`);
}
}
// 사용자 관리 클래스
class UserManager {
constructor(logger) {
this.logger = logger;
this.users = [];
}
addUser(user) {
this.users.push(user);
this.logger.log(`User ${user.name} added`);
return this.users.length;
}
}
// Dummy 로거
class DummyLogger {
constructor(logLevel) {
// 아무것도 저장하지 않음
}
log(message) {
// 아무것도 하지 않음
}
}
// 테스트 코드
describe('UserManager', () => {
it('should add a new user correctly', () => {
// Dummy 로거 사용
const dummyLogger = new DummyLogger();
const userManager = new UserManager(dummyLogger);
// 실제로 테스트하고 싶은 것은 사용자 추가 로직입니다
const userCount = userManager.addUser({ name: 'John' });
expect(userCount).toBe(1);
expect(userManager.users.length).toBe(1);
});
});
|
참고 및 출처#