Quantcast
Channel: Active questions tagged propagation - Stack Overflow
Viewing all articles
Browse latest Browse all 52

I don't know why Transaction doesn't work in spring boot test

$
0
0
    @Test    public void 물건_구매_실패_테스트() {        Store store = this.storeService.saveStore("store", StoreType.KOREAN);        Item item = this.itemService.itemSave(store.getStoreId(), "비빔밥", 8000, 1);        Customer c1 = this.customerService.customerSave("c1", 5000);        Customer c2 = this.customerService.customerSave("c2", 10000);        Customer c3 = this.customerService.customerSave("c3", 10000);        {            IllegalStateException illegalStateException = assertThrows(IllegalStateException.class,                () -> this.customerService.buyItem(c1.getCustomerId(), item.getItemId())            );            assertThat(illegalStateException.getMessage()).isEqualTo("소지금보다비싼물건을구매할수없습니다.");        }        {            CustomerItem customerItem = this.customerService.buyItem(c2.getCustomerId(), item.getItemId());            assertThat(customerItem.getCustomerId()).isEqualTo(c2.getCustomerId());            assertThat(customerItem.getItemId()).isEqualTo(item.getItemId());        }        {            IllegalStateException illegalStateException2 = assertThrows(IllegalStateException.class,                () -> this.customerService.buyItem(c3.getCustomerId(), item.getItemId())            );            assertThat(illegalStateException2.getMessage()).isEqualTo("남은재고가없습니다.");        }    }
    @Transactional(rollbackFor = IllegalStateException.class)    public CustomerItem buyItem(long customerId, long itemId) {        Item item = this.itemService.minusRemained(itemId);        Customer customer = this.minusPoint(customerId, item);        CustomerItem customerItem = this.customerItemService.customerItemSave(customer.getCustomerId(), item.getItemId());        return customerItem;    }
    public Item minusRemained(long itemId) {        Item item = this.itemRepository.findById(itemId)            .orElseThrow(() -> new IllegalStateException("해당하는물품이없습니다."));        if (item.getRemained() == 0) {            throw new IllegalStateException("남은재고가없습니다.");        }        item.setRemained(item.getRemained() - 1);        return item;    }

this is my code.And at test, I can pass first test case.But the remain does not rollback.so after first test, item's remained became 0.

I want to buyItem method to rollback if IllegalStateException has come.Thank you.

I tried using new entity. And it worked well.But I am using spring data JPA.So I want to utilize EntityManager.


Viewing all articles
Browse latest Browse all 52

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>