티스토리 뷰

SMALL

1차 오류

java.lang.AssertionError: Expected: is <false>     but: was <true>

 

지금 repository를 만들어놓고 테스트 중인데, 계속해서 testFindById()에서 해당 오류가 떴다.

테스트이기때문에, 저 오류는 절대 뜨면 안되는 오류였다.

 

- test

@Test
    @Order(3)
    @DisplayName("상품을 아이디로 조회할 수 있다.")
    void testFindById(){
        var product = repository.findById(newProduct.getProductId());
        assertThat(product.isEmpty(), Matchers.is(false));
    }

 

- repository

@Override
    public Optional<Product> findById(UUID productId) {
        try {
            return Optional.ofNullable(
                    jdbcTemplate.queryForObject("SELECT * FROM products WHERE product_id = :productId",
                            Collections.singletonMap("productId", productId.toString().getBytes()), productRowMapper));
        }catch (EmptyResultDataAccessException e){
            return Optional.empty();
        }
    }

 

 

원인 분석

일단 test 코드에 어떤 변수에 값이 들어오지 않았는지 파악했다.

System.out.println("testfindbyid : " + newProduct.getProductId());
System.out.println("testfindbyid : " + product.get());

 

2차 오류

java.util.nosuchelementexception: no value present

 

: newProduct의 id값은 잘 나왔지만, product의 id값은 나오지 않고 저 오류가 발생했다.

즉, product값은 없는 것이고, repository.findById(newProduct.getProductId()); 여기에서 문제가 발생했다는 것을 알 수 있었다.

getProductId()에는 문제가 없으므로 repository.findById 메소드가 문제라고 생각해서 해당 코드를 살펴보았다.

사실 이때 type 문제라는 감이 왔다. 그래서 type 위주로 코드를 살펴보았다.

 

 

1. findById()에 넣은 값의 타입이 UUID인가

2. 파라미터를 UUID로 받는가

3. SQL에 넣을 때, UUID type을 BYTE type으로 변환하였는가

 

1, 2번은 실행하지 않아도 알 수 있었고, 파라미터 값으로 productId값이 잘 도착했는지

sout으로 코드를 치고 실행하여 잘 도착했는지 확인할 수 있었다.

 

3번이 문제였다.  - productId.toString().getBytes()

이게 productId type을 byte로 바꾸어주지 못하고 있었다.

그래서 UUID 타입을 BYTE로 바꾸어주는 메소드를 추가하였고 해당 함수를 호출하도록 코드를 변경해주었다.

 

- UUID --> BYTE

private byte[] convertUUIDToBinary(UUID uuid) {
        ByteBuffer bb = ByteBuffer.wrap(new byte[16]);
        bb.putLong(uuid.getMostSignificantBits());
        bb.putLong(uuid.getLeastSignificantBits());
        return bb.array();
    }

 

- 변경한 Repository

productId.toString().getBytes() --변경--> convertUUIDToBinary(productId)

 

 

해결!

반응형
LIST
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함