inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Trong thực tế! Sử dụng Spring Boot và JPA1 - Phát triển ứng dụng Web

Kiểm tra chức năng đặt hàng

기능테스트시, setName() 등 메서드 오류

672

geonut

8 câu hỏi đã được viết

0

기능테스트시 아래에 빨강 음영부분에 의해 진행이 되질 않습니다.
해당 문제는 상속문제라 생각하여, 해당 코드를 아래에 올렸습니다.
 
왜 Item. Book class의 변수에 관한 메서드가 문제가 되는지 조언 부탁드립니다.
 


package jpabook.jpashop.service;

import jpabook.jpashop.domain.Address;
import jpabook.jpashop.domain.Member;
import jpabook.jpashop.domain.Order;
import jpabook.jpashop.domain.OrderStatus;
import jpabook.jpashop.domain.item.Item;
import jpabook.jpashop.exception.NotEnoughStockException;
import jpabook.jpashop.repository.OrderRepository;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.EnableMBeanExport;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.transaction.annotation.Transactional;

import javax.persistence.EntityManager;
import java.awt.print.Book;

import static org.junit.Assert.*;

@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional
public class OrderServiceTest {

@Autowired EntityManager em;
@Autowired OrderService orderService;
@Autowired
OrderRepository orderRepository;
/**
* 상품 주문
*/
@Test
public void order() {

// given
Member member = createMember();

Book book = createBook("시골 JPA", 10000, 10);

int orderCount = 2;

// when
Long orderId = orderService.order(member.getId(), book.getId(), orderCount);

// then
Order getOrder = orderRepository.findOne(orderId);

assertEquals("상품 주문시 상태는 ORDER", OrderStatus.ORDER, getOrder.getStatus());
assertEquals("주문한 상품 종류 수가 정확해야 한다.", 1, getOrder.getOrderItems().size());
assertEquals("주문 가격은 가격 * 수량이다.", 1000 * orderCount, getOrder.getTotalPrice());
assertEquals("주문 수량만큼 재고가 줄어야 한다.", 8, book.getStockQuantity());
}

/**
* 주문취소
*/
@Test
public void cancelOrder() {

Member member = createMember();
Book item = createBook("시골 JPA", 10000, 10);

int orderCount = 2;
Long orderId = orderService.order(member.getId(), item.getId(), orderCount);

orderService.cancelOrder(orderId);

Order getOrder = orderRepository.findOne(orderId);

assertEquals("주문 취소시 상태는 CANCEL 이다.", OrderStatus.CANCEL, getOrder.getStatus());
assertEquals("주문이 취소된 상품은 그만큼 재고가 증가해야한다.", 10, item.getStockQuantity());
}

/**
* 재고수량 초과
*/
@Test(expected = NotEnoughStockException.class)
public void 상품주문_재고수량초과() throws Exception{


// given
Member member = createMember();
Item item = createBook("시골 JPA", 10000, 10);

int orderCount = 11;

// when
orderService.order(member.getId(), item.getId(), orderCount);

// then
fail("재고 수량 부족 예외가 발생해야 한다.");

}

private Book createBook(String name, int price, int stockQuantity) {
Book book = new Book();
book.setName(name);
book.setPrice(price);
book.setStockQuantity(stockQuantity);
em.persist(book);
return book;
}

private Member createMember() {
Member member = new Member();
member.setName("회원1");
member.setAddress(new Address("서울", "강가", "123-123"));
em.persist(member);
return member;
}
package jpabook.jpashop.domain.item;

import jpabook.jpashop.domain.Category;
import jpabook.jpashop.exception.NotEnoughStockException;
import lombok.Getter;
import lombok.Setter;

import javax.persistence.*;
import java.util.ArrayList;
import java.util.List;

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name = "dtype")
@Getter @Setter
public abstract class Item {

@Id
@GeneratedValue
@Column(name = "item_id")
private Long id;

private String name;
private int price;
private int stockQuantity;

@ManyToMany(mappedBy = "items")
private List<Category> categories = new ArrayList<>();

// == 비즈니스 로직 == //
// stockQuantity의 경우, Item 엔티티 내에만 있으므로 해당 클래스에서 비즈니스 로직을 설정(엔티티 주도 설계)

/**
* 재고 수량 증가*
* */
public void addStock(int quantity){
this.stockQuantity += quantity;
}

/**
* 재고 수량 감소*
* */
public void removeStock(int quantity){
int restStock = this.stockQuantity - quantity;
if(restStock<0){
throw new NotEnoughStockException("need more stock");
}
this.stockQuantity = restStock;
}

}
package jpabook.jpashop.domain.item;

import lombok.Getter;
import lombok.Setter;

import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;

@Entity
@DiscriminatorValue("B")
@Getter @Setter
public class Book extends Item{

private String author;
private String isbn;
}

상속관계 java 웹앱 JPA spring spring-boot

Câu trả lời 3

0

wbsu903218

Setter 어노테이션 다 작성 되어있으신거에요?

 

0

geonut

Starting Gradle Daemon...

Gradle Daemon started in 2 s 904 ms

 

> Task :compileJava

> Task :processResources UP-TO-DATE

> Task :classes

> Task :compileTestJava FAILED

C:\������\Ȱ��1\jpashop\src\test\java\jpabook\jpashop\service\OrderServiceTest.java:47: error: cannot find symbol

        Long orderId = orderService.order(member.getId(), book.getId(), orderCount);

                                                              ^

  symbol:   method getId()

  location: variable book of type Book

C:\������\Ȱ��1\jpashop\src\test\java\jpabook\jpashop\service\OrderServiceTest.java:55: error: cannot find symbol

        assertEquals("�ֹ� ������ŭ ��� �پ�� �Ѵ�.", 8, book.getStockQuantity());

                                                   ^

  symbol:   method getStockQuantity()

  location: variable book of type Book

C:\������\Ȱ��1\jpashop\src\test\java\jpabook\jpashop\service\OrderServiceTest.java:68: error: cannot find symbol

        Long orderId = orderService.order(member.getId(), item.getId(), orderCount);

                                                              ^

  symbol:   method getId()

  location: variable item of type Book

C:\������\Ȱ��1\jpashop\src\test\java\jpabook\jpashop\service\OrderServiceTest.java:75: error: cannot find symbol

        assertEquals("�ֹ��� ��ҵ� ��ǰ�� �׸�ŭ ��� �����ؾ��Ѵ�.", 10, item.getStockQuantity());

                                                            ^

  symbol:   method getStockQuantity()

  location: variable item of type Book

C:\������\Ȱ��1\jpashop\src\test\java\jpabook\jpashop\service\OrderServiceTest.java:87: error: incompatible types: Book cannot be converted to Item

        Item item = createBook("�ð� JPA", 10000, 10);

                              ^

C:\������\Ȱ��1\jpashop\src\test\java\jpabook\jpashop\service\OrderServiceTest.java:101: error: cannot find symbol

        book.setName(name);

            ^

  symbol:   method setName(String)

  location: variable book of type Book

C:\������\Ȱ��1\jpashop\src\test\java\jpabook\jpashop\service\OrderServiceTest.java:102: error: cannot find symbol

        book.setPrice(price);

            ^

  symbol:   method setPrice(int)

  location: variable book of type Book

C:\������\Ȱ��1\jpashop\src\test\java\jpabook\jpashop\service\OrderServiceTest.java:103: error: cannot find symbol

        book.setStockQuantity(stockQuantity);

            ^

  symbol:   method setStockQuantity(int)

  location: variable book of type Book

8 errors

FAILURE: Build failed with an exception.

* What went wrong:

Execution failed for task ':compileTestJava'.

> Compilation failed; see the compiler error output for details.

* Try:

Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 22s

3 actionable tasks: 2 executed, 1 up-to-date

 

0

David

확인 감사합니다.

해당 에러만으로는 어떤 부분이 문제인지 파악하기 어렵네요.

아래 가이드를 참고하셔서 링크를 올려주시면 제가 직접 코드를 보면서 다시 확인해보겠습니다.



전체 프로젝트를 압축해서 구글 드라이브로 공유해서 링크를 남겨주세요.
구글 드라이브 업로드 방법은 다음을 참고해주세요.

https://bit.ly/3fX6ygx

주의: 업로드시 권한 문제 꼭 확인해주세요

0

David

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

.
에러 로그도 함께 첨부 요청드립니다.
.
감사합니다.

0

geonut

답변 감사드립니다. 아래에 해당 로그창 첨부했습니다.

sdk 설정 오류

0

43

2

오탈자 - @Transactional

0

50

1

src/test/resources 테스트 경로 문제

0

49

1

상품 등록후 H2 db 출력 순서 바꿀 수 있나요?

0

62

1

MemberRepositoryTest 실행오류

0

73

1

boot 4.x >>> trasasction rolled back log & p6spy(영한님, 수업 자료 업데이트 해주시면 감사하겠습니다!!)

1

181

2

강의 마지막 QueryDSL 사용 부분 질문있습니다

1

135

2

클라이언트에서 isbn과 author 수정 요청을 한 경우에 대해 질문드립니다.

0

50

1

도메인 모델 패턴 vs 트랜잭션 스크립트 패턴

0

71

1

기본 생성자

0

59

1

h2 DB 연결시 jdbc url 변경 이유가 궁금합니다.

0

100

1

멤버서비스테스트 부분에서 막힙니다.

0

163

4

실무에서도 EntityManager를 이용해서 많이 작업하는 편일까요?

0

115

1

초반에 h2 다운로드 과정 꼭 필요한가요?

0

117

2

자신 필드에도 get으로 접근하는 이유가 있을까요?

0

108

1

24분 27초 연관관계 편의 메서드 위치

0

112

1

단건 주문만 가능하게 한건 의도한 부분이신가요?

0

106

2

빌드 툴, Gradle

0

57

1

h2연결은 된 것 같은데 엔티티 테이블까지 작성 후 확인해보아도 테이블이 안보입니다

0

73

2

Repository에서 EntityManager 주입 방식 차이

0

87

1

롬복과 사용자 정의 setter 메서드

0

70

1

주문 목록 조회 fetch join 질문드립니다

0

79

1

dirty checking 질문드립니다.

0

78

1

동시성 관련 질문입니다

0

70

1