인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

vedivero님의 프로필 이미지
vedivero

작성한 질문수

스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술

스프링 통합 테스트

void 회원가입( ) { } 실행 에러

작성

·

774

0

org.springframework.transaction.CannotCreateTransactionException:
Could not open JDBC Connection for transaction; nested exception is org.h2.jdbc.JdbcSQLInvalidAuthorizationSpecException: Wrong user name or password [28000-200]
.
.
.
Caused by: org.h2.jdbc.JdbcSQLInvalidAuthorizationSpecException: Wrong user name or password [28000-200]
.
.

어제 까지 H2실행하면서 데이터 입력하고 잘 따라하고 있었는데
오늘 학습하면서 void( ) 회원가입 테스트 했는데
위와 같은 에러코드가 출력되고 있어요
원인을 찾다가 한계에 부딪혀 질문 올리게 되었습니다.
MemberServiceIntegrationTest.java
package hello.hellospring.service;

import hello.hellospring.domain.Member;
import hello.hellospring.repository.MemberRepository;
import hello.hellospring.repository.MemoryMemberRepository;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.transaction.annotation.Transactional;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;

@SpringBootTest
@Transactional
class MemberServiceIntegrationTest {

@Autowired MemberService memberService;
@Autowired MemberRepository memberRepository;

@Test
void 회원가입() {

//given
Member member = new Member();
member.setName("hello");

//when
Long saveId = memberService.join(member);

//then
Member findMember = memberService.findOne(saveId).get();
assertThat(member.getName()).isEqualTo(findMember.getName());

}

@Test
public void 중복_회원_예외() {
//given
Member member1 = new Member();
member1.setName("spring");

Member member2 = new Member();
member2.setName("spring");

//when
memberService.join(member1);
IllegalStateException e = assertThrows(IllegalStateException.class, () -> memberService.join(member2));

assertThat(e.getMessage()).isEqualTo("이미 존재하는 회원입니다.");

}
}


build.gradle

plugins {
id 'org.springframework.boot' version '2.5.2'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}

group = 'hello'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
//mavenCentral라는 곳에서 Library를 다운로드 한다.
mavenCentral()
}

dependencies {
//템플릿 엔진 - HTML 생성해주는 라이브러리
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
runtimeOnly 'com.h2database:h2'
//JUnit Library
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

test {
useJUnitPlatform()
}

application.properties

spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Driver

답변 1

1

안녕하세요. vedivero님, 공식 서포터즈 OMG입니다.

코드를 상세히 올려주셔서 어떤점이 문제인지 바로 파악했습니다.

현재 vedivero님이 사용중인 스프링부트의 버전은 2.5.2인데요,

강의 메뉴얼 첫페이지에도 나와있다시피 스프링부트 2.4 부터는 application.properties에

h2의 username을 추가해주셔야 합니다.

해당 코드를 추가해도 문제가 발생할 경우 댓글 남겨주세요.

감사합니다.

vedivero님의 프로필 이미지
vedivero
질문자

이렇게 신속하게 답변을 해주셔서 정말 감사드려요!

connection이 안 되서 진행을 못 하고 있었는데 ㅠㅠ 감사합니다~^^

도움이 되어 기쁘네요 ㅎㅎ

열공하세요!

하다 막히는 부분 있으면 언제든지 질문남겨주세요~~

vedivero님의 프로필 이미지
vedivero

작성한 질문수

질문하기