본문 바로가기

분류 전체보기20

[Spring] SecurityContext에 사용자 정보 넣어 테스트하기 Security Context에 우리가 원하는 사용자의 정보를 넣어 테스트가 정상적으로 동작할 수 있도록 해보자. 테스트 케이스를 작성하다 보면 사용자 정보 변경, 로그인 된 사용자만 요청가능한 API를 테스트하는 경우가 있다. 그러기 위해서는 Secutiry Context에 사용자 정보가 들어있어야 한다. 기본적으로 Spring Secutity를 사용하여 로그인 서비스가 구성되어있다는 가정하에 진행한다. WithSecurityContextFactory WithSecurityContextFactory는 SecutiryContext를 생성하여 테스트 시 사용할 수 있도록 해주는 인터페이스이다. 우리는 이 인터페이스의 구현체를 작성하여 사용할 것 이다. createSecutiryContext 메서드의 파라미.. 2022. 2. 10.
Interceptor 사용하여 TypeORM Transaction 적용하기 일반적인 TypeORM의 Transaction TypeORM을 사용하면서 Transation을 적용하려면 코드가 매우 지져분해진다. Spring처럼 @Transactional을 사용하여 간단하게 적용할 수 있지만, 모든 Repository manager에 동일하게 적용되지 않기 때문에 사용하지 않는 것을 추천한다. 따라서 일반적으로 TypeORM을 사용하면서 Transaction을 적용하려면 다음과 같이 사용해야 한다. public testMethoad() { const queryRunner = this.connection.createQueryRunner(); await queryRunner.connect(); await queryRunner.startTransaction(); try { await qu.. 2022. 2. 10.
[Test] Mockito를 사용해보자 (2) 이전 포스트에서 Mockito가 무엇이고 어떻게 사용하는지 기본적으로 알아보았다. 이번에는 Mockito에서 제공하는 BDD스타일을 정리한다. Mockito의 BDD스타일 이전 포스트에서 Mock객체를 만들어 Stubbing하는 방법을 알아보았다. Mockito에서는 BDD라는 스타일의 방식으로 Stubbing을 제공한다. BDD가 뭔데? BDD는 'Behavior Driven Develop'의 약자로 클래스의 행위에 대한 테스트를 진행한다는 의미이다. 테스트 케이스의 메서드명을 '~클래스는 ~행위를 해야한다'라는 식의 문장으로 작성하며 어떠한 시나리오를 기반하여 작성하는 개발 방법이라고 한다. (BDD에 대해 좀 더 공부하여 개별 포스팅을 하고 링크를 추가해야겠다.) 기본적인 Mock객체를 Stubbi.. 2022. 2. 10.
[Test] Mockito를 사용해보자 (1) Mockito 자바 코드를 테스트는 JUnit5 프레임워크를 통해 진행할 수 있다. 그럼 Mockito는 뭔가? 우선 Mock의 뜻은 모조품이다. 즉, Mockito는 가짜 객체를 만들 수 있도록 해준다. Mock이 필요한 이유 그럼 왜 가짜 객체가 필요한가? 예를 들어, 나는 B라는 객체의 run()메서드를 테스트 하고 싶다. 그런데 B 인스턴스를 생성하기 위해서는 A라는 인스턴스를 B의 생성자 매개변수로 넘겨주어야 한다. 즉, B가 A에 의존하고 있는 것을 알 수 있다. 만약, A가 또 다른 객체에 의존하고 있다면 B의 run()메서드를 테스트 하기 위해 많은 인스턴스를 생성해야 한다. 이렇게 강한 의존성을 끊기위해 가짜 객체를 생성하고 이를 Mockito를 통해 사용할 수 있다. 또, 구현체가 없는.. 2022. 2. 10.