Skip to content

Commit

Permalink
Add: Junit 5 Init and Sample Test Code
Browse files Browse the repository at this point in the history
  • Loading branch information
parksangdonews committed Mar 13, 2024
1 parent 8905b76 commit 7b0cc51
Show file tree
Hide file tree
Showing 6 changed files with 165 additions and 1 deletion.
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ dependencies {

testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.named('test') {
useJUnitPlatform()
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.ttp.mvcframework.example;

/**
* <b>정상패스워드 생성</b>
* <p>
*
* </p>
*
* @author sangdo.park
* @since 3/14/24
*/
public class CorrectPasswordGenerator implements PasswordGeneratePolicy {

@Override
public String generatePassword() {
return "12345678";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.ttp.mvcframework.example;

/**
* <b>PasswordGeneratePolicy</b>
* <p>
* 패스워드 생성 정책
* </p>
*
* @author sangdo.park
* @since 3/14/24
*/
public interface PasswordGeneratePolicy {

String generatePassword();

}
33 changes: 33 additions & 0 deletions src/main/java/com/ttp/mvcframework/example/PasswordValidator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package com.ttp.mvcframework.example;

/**
* <b>패스워드 검증</b>
* <p>
* 비밀번호가 8자 미만 또는 12자 초과하는 경우 IllegalArgumentException 예외가 발생한다.
* </p>
*
* @author sangdo.park
* @since 3/14/24
*/
public class PasswordValidator {

/**
* 비밀번호가 8자 미만 또는 12자 초과하는 경우 IllegalArgumentException 예외가 발생한다.
*/
public void validate(String password) {
int length = password.length();

if (length < 8 || length > 12) {
throw new IllegalArgumentException("비밀번호는 최소 8자 이상 12자 이하여야 한다.");
}
}

public void validate2(PasswordGeneratePolicy passwordGeneratePolicy) {
String password = passwordGeneratePolicy.generatePassword();

int length = password.length();
if (length < 8 || length > 12) {
throw new IllegalArgumentException("비밀번호는 최소 8자 이상 12자 이하여야 한다.");
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package com.ttp.mvcframework.example;

/**
* <b>비정상패스워드 생성</b>
* <p>
*
* </p>
*
* @author sangdo.park
* @since 3/14/24
*/
public class WrongPasswordGenerator implements PasswordGeneratePolicy {

@Override
public String generatePassword() {
return "zero1234567890";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
package com.ttp.mvcframework.example;

import static org.assertj.core.api.AssertionsForClassTypes.assertThatCode;

import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.ValueSource;

/**
* <b></b>
* <p>
*
* </p>
*
* @author sangdo.park
* @since 3/14/24
*/
class PasswordValidatorTest {

/*
[] 비밀번호는 최소 8자 이상 12자 이하여야 한다.
[] 비밀번호가 8자 미만 또는 12자 초과인 경우 IllegalArgumentException 예외를 발생시킨다.
[] 경계조건에 대해 테스트 코드를 작성해야 한다.
*/

@DisplayName("비밀번호가 최소 8자 이상, 12자 이하면 예외가 발생하지 않는다.")
@Test
void validatePasswordTest() {
// given
String password = "12345678";
PasswordValidator passwordValidator = new PasswordValidator();

// when, then
assertThatCode(() -> passwordValidator.validate(password)).doesNotThrowAnyException();

}


@DisplayName("비밀번호가 8자 미만 또는 12자 초과하는 경우 IllegalArgumentException 예외가 발생한다.")
@ParameterizedTest
@ValueSource(strings = {"aabbcce", "aabbccddeeffg"})
void validatePasswordTest2(String value) {
// given
PasswordValidator passwordValidator = new PasswordValidator();

// when, then
assertThatCode(() -> passwordValidator.validate(value))
.isInstanceOf(IllegalArgumentException.class)
.hasMessage("비밀번호는 최소 8자 이상 12자 이하여야 한다.");
}

/**
* 테스트 하기 쉬운 코드를 작성하다 보면 더 낮은 결합도를 가진 설계를 얻을 수 있다.
*/
@DisplayName("비밀번호가 최소 8자 이상, 12자 이하면 예외가 발생하지 않는다.")
@Test
void validatePasswordTest2() {
// given
PasswordValidator passwordValidator = new PasswordValidator();

// when, then
assertThatCode(() -> passwordValidator.validate2(new CorrectPasswordGenerator()))
.doesNotThrowAnyException();
}


@DisplayName("비밀번호가 8자 미만 또는 12자 초과하는 경우 IllegalArgumentException 예외가 발생한다.")
@Test
void validatePasswordTest3() {
// given
PasswordValidator passwordValidator = new PasswordValidator();

// when, then
assertThatCode(() -> passwordValidator.validate2(new WrongPasswordGenerator()))
.isInstanceOf(IllegalArgumentException.class)
.hasMessage("비밀번호는 최소 8자 이상 12자 이하여야 한다.");
}
}

0 comments on commit 7b0cc51

Please sign in to comment.