어웨이크

이미지
어웨이크 | 박세니 이 책은 내안에 잠든 무한한 가능성을 깨우기 위해서 어떤 마음가짐과 행동을 가져야 하는지에 대해 서술한다. 가끔 내가 이루고자 하는 목표를 위해 열심히 달리다가도 무슨 부귀영화를 누리기 위해 이렇게 열심히 하는걸까 하고 현타가 올때가 있다. 그 때마다 이 책을 읽으며 지금 흘러가는 이 시간을 소중히 여기고 다시 힘을 내자고 다짐했다. 그리고 내가 사회에 영향을 끼칠만한 사람이 될 수 있을까, 내가 가진 능력에 비해 그런 목표는 욕심이 아닐까, 라는 생각을 할 때가 많았는데 이 책은 나 자신에 대한 믿음을 가지고 계속 나아가기 위한 동력을 만들어주었다. 자신이 하는 일에 대한 자부심과 긍지 그리고 확신을 품어야 성공할 수 있다. 이것이야말로 대단한 존재를 만드는 근원적 에너지다. 대부분의 사람은 자신이 하는 일에 대한 긍지를 갖추지 못한 채로 살고 있다. 그러다보니 남의 눈치를 보고 수동적이며 평범한 삶을 살게 된다. 나니까 할 수 있고, 나니까 가능한 것이며, 나만이 할 수 있는 것이라는 생각, 이런 생각들이 어린 시절부터 계속해서 쌓이고 쌓이다 보면 정말 그런 존재로 거듭나게 된다. 인간은 매 순간을 집중하고 몰입하면서 멋지고 의미있게 살아가야 하는 존재다. 스스로가 자신의 삶을 가치 있게 여기고 의미 있게 만들지 못한다면 우리의 삶은 무의미하고 우울하며 무기력해질 수밖에 없다. 모든 것은 자신의 마음이 만든다. 일체유심조의 정신으로 치열하고 후회 없는 삶을 만들기 위해 오늘도 한발 더 나아가야 한다. 삶이 끝나는 순간까지 고도의 집중과 몰입상태를 자신의 분야에서 더 멋있게 잘 만들어내기 위한 노력을 해야 한다. 그것이 우리가 진정으로 바라는 멋진 인생이다.

Spring Boot에 Spock 적용하기

개발 환경

  • IDE: IntelliJ IDEA Ultimate
  • SpringBoot 2.0.4
  • Java8
  • Gradle

Dependency 추가

groovy 및 spock dependency 추가

build.gradle

apply plugin: 'groovy'
dependencies {

    // Spock
    testCompile group: 'org.spockframework', name: 'spock-core', version: '1.1-groovy-2.4'
    testCompile group: 'org.spockframework', name: 'spock-spring', version: '1.1-groovy-2.4'

    // Groovy
    testCompile "org.codehaus.groovy:groovy-all:2.4.15"

    // Mock
    testRuntime 'cglib:cglib-nodep:3.2.4'
    testCompile group: 'org.objenesis', name: 'objenesis', version: '2.6'
}


Code

spock로 test code를 작성해볼 method는 getCustomerByName() 이다.
해당 method는 단순히 CustomerRepository에서 Customer entity를 가져온다.
기존에 customerRepository를 setter injection방식으로 @Autowired annotation을 붙여 사용하였는데 spock에서 mocking이 제대로 되지않아서 constructor injection방식을 사용하게 되었다.
이후에 알게되었는데 constructor injection으로 구현하였을 때, bean 생성자가 의존성 감시 기능 및 독립적으로 class를 작성할 수 있어 spring에서 권고하는 방식이라고 한다.

CustomerServiceImpl.java

@Service
public class CustomerServiceImpl implements CustomerService {

    private CustomerRepository customerRepository;

    @Autowired 
    public CustomerServiceImpl(CustomerRepository customerRepository) {
        this.customerRepository = customerRepository;
    }

    @Override
    public Customer getCustomerByName(String name) {
        return customerRepository.findByName(name);
    }
}


Spock Code

src/main/test/ 하위에 groovy 디렉토리를 생성 후, 다음과 같이 테스트 코드를 작성하였다.
실제 DB와 연동하여 test하고 싶으면 customerRepository를 Mock()으로 선언하지않고 @Autowired를 붙여주면 된다.

CustomerServiceSpec.groovy

@SpringBootTest
class CustomerServiceSpec extends Specification {
    CustomerService customerService
    CustomerRepository customerRepository = Mock()

    // Same as @Before
    def setup() {
        customerService = new CustomerServiceImpl(customerRepository)
    }

    // Same as @After
    def cleanup() {}

    def "Get Customer By Name"() {
        given:
        def name = "John"

        when:
        Customer customer = customerService.getCustomerByName(name)

        then:
        customerRepository.findByName(name) >> Customer.builder().id(1).name(name).build()
        customer.getName() == name
    }
}


댓글