원하는 작업을 하기 위해 기준을 정하여 데이터를 정렬하려는 목적으로 사용한다.
def bubbleSort(data):
for i in range(len(data)):
for j in range(i):
if data[j] > data[j + 1]:
data[j], data[j + 1] = data[j + 1], data[j]
return data
print("버블정렬")
print(bubbleSort([3, 4, 5, 2, 9, 12, 34, 2]))
print()
def selectionSort(data):
for i in range(len(data)):
idx = i
for j in range(i + 1, len(data)):
if data[idx] > data[j]:
idx = j
data[i], data[idx] = data[idx], data[i]
return data
print("선택정렬")
print(selectionSort([3, 4, 5, 2, 9, 12, 34, 2]))
print()
def insertSort(data):
for end in range(1, len(data)):
for i in range(end, 0, -1):
if data[i - 1] > data[i]:
data[i - 1], data[i] = data[i], data[i - 1]
return data
print("삽입정렬")
print(insertSort([3, 4, 5, 2, 9, 12, 34, 2]))
print()
@Test
@WithAnonymousUser
@DisplayName("로그인에 성공하면 HttpStatus 는 redirection 다")
void when_login_success_should_return_OK() throws Exception {
// given
memberService.signup(memberRequestDto);
// when
LoginRequestDto loginRequestDto = new LoginRequestDto(memberRequestDto.getId(), memberRequestDto.getPassword());
// then
mvc.perform(post("/login")
.content(objectMapper.writeValueAsString(loginRequestDto)))
.andExpect(result -> {
String attributeName = "org.springframework.security.web.context.RequestAttributeSecurityContextRepository.SPRING_SECURITY_CONTEXT";
SecurityContext securityContext
= (SecurityContext) result.getRequest().getAttribute(attributeName);
Authentication authentication = securityContext.getAuthentication();
assertInstanceOf(UsernamePasswordAuthenticationToken.class, authentication);
assertEquals(memberRequestDto.getId(), authentication.getPrincipal());
})
.andDo(print())
.andExpect(status().is3xxRedirection());
}
위 테스트 코드를 PR 에서 받은 피드백은 아래와 같다.
이 테스트는 mockMvc를 통해 블랙박스형태의 테스트를 하고있으면서
SecurityContext를 불러오는 화이트박스 테스트를 동시에 진행하고 있네요.
mockMvc로 테스트하실것이라면 로그인이 적용되어야만 접속 가능한 특정 URL을 조회하고,
조회가 가능한지를 테스트해보는게 더 명확합니다.
화이트 박스 검사와 블랙 박스 검사 개념을 몰라서 두 검사를 한 테스트에서 해버렸다.
블랙박스 검사
블랙박스 검사(Black-box testing)는 소프트웨어 검사 방법 중 하나로 어떤 소프트웨어를 내부 구조나 작동 원리를 모르는 상태에서 소프트웨어의 동작을 검사하는 방법을 이르는 말이다.
화이트박스 검사
화이트박스 검사(White-box testing)는 응용 프로그램의 내부 구조와 동작을 검사하는 소프트웨어 테스트 방식으로, 블랙박스 검사와는 반대된다.
사용자의 로그인 정보로 로그인이 정상적으로 수행 검증 → 화이트박스 검사
스프링 시큐리티의 로그인 처리 내부 코드 검증 → 블랙박스 검사
Method Signature
Two of the components of a method declaration comprise the method signature—the method's name and the parameter types.
메서드 이름
, 메서드 파라미터 리스트
public class MemberDao {
public void update(String sql) throws DataAccessException {
System.out.println("update");
}
}
public class MemberDaoMongo extends MemberDao {
@Override
public void update(String sql) throws IllegalStateException {
System.out.println("mongo update");
}
}
public static void main(String[] args) {
MemberDao memberDao = new MemberDao();
memberDao.update("update");
memberDao = new MemberDaoMongo();
memberDao.update("mongo update");
}
update 의 예외를 다르게 정의해도 시그니처가 같기 때문에 오버라이딩이 문제 없다.
Method Type
A method type represents the arguments and return type accepted and returned by a method handle, or the arguments and return type passed and expected by a method handle caller. Method types must be properly matched between a method handle and all its callers, and the JVM's operations enforce this matching at, specifically during calls to
[MethodHandle.invokeExact]
and[MethodHandle.invoke]
, and during execution ofinvokedynamic
instructions.
return type
, method type parameter
, parameter type
, exception