본문 바로가기

분류 전체보기86

[kotlin/mockk] mockStatic 해제하기 - clearStaticMockk internal class MockkStaticTest { @Test fun `현재 시간 mock 테스트`() { mockkStatic(LocalDateTime::class) every { LocalDateTime.now() } returns LocalDateTime.of(LocalDate.of(1993, 1, 10), LocalTime.of(11, 57)) LocalDateTime.now().let { it.year shouldBe 1993 it.month shouldBe Month.JANUARY it.dayOfMonth shouldBe 10 } } @AfterEach fun clearStaticMockkLocalDateTime() { clearStaticMockk(LocalDateTime::class.. 2022. 1. 26.
[클린 소프트웨어] PART 2 - CHAPTER 8 - 단일 책임 원칙(SRP) 한 클래스는 단 한 가지의 변경 이유만을 가져야 한다. SRP; Single-Responsibility Priciple 여기서 '책임(Responsibility)'이란 '변경을 위한 이유'로 정의된다. 만약 한 클래스를 변경하기 위한 한 가지 이상의 이유를 생각할 수 있다면, 그 클래스는 한 가지 이상의 책임을 맡고 있는 것이다. 만약 한 클래스가 하나 이상의 책임을 맡는다면, 그 책임들은 결합(= cohesion이 생김)된다. 한 책임에 대한 변경은 다른 책임을 충족시키는 클래스의 능력을 떨어뜨리거나 저하시킬 수 있다. 이러한 종류의 결합은 변경을 했을 때 예상치 못한 방식으로 잘못 동작하는 취약한 설계를 유발한다. 한편, 애플리케이션이 서로 다른 시간에 두 가지 책임의 변경을 유발하는 방식으로 바뀌지.. 2022. 1. 21.
[클린 소프트웨어] PART 2 - CHAPTER 7 - 애자일 설계란 무엇인가? 애자일 팀에서는 나중의 요구사항과 필요에 대해서는 그리 오래 생각하지 않는다. 그보다는, 현재 구조에 초점을 두고 더욱 개선하기 위해 노력한다. 잘못된 설계의 증상 Rigidity(경직성): 설계를 변경하기 어려움 - 변경을 하기 위해 시스템의 다른 부분들까지 많이 변경해야 하기 때문이다. Fragility(취약성): 설계가 망가지기 쉬움 - 변경을 하면 시스템에서 그 부분과 개념적으로 아무런 관련이 없는 부분이 망가진다. Immobility(부동성): 설계를 재사용하기 어려움 Viscosity(점착성): 제대로 동작하기 어려움 Needless Complexity(불필요한 복잡성): 과도한 설계 - 직접적인 효용이 전혀 없는 기반구조가 설계에 포함되어 있다. Needless Repetition(불필요한 .. 2022. 1. 18.
[클린 소프트웨어] PART 1 - CHAPTER 5 - 리팩토링 모든 소프트웨어 모듈에는 세 가지 기능이 있다. 실행 중에 동작하는 기능: 모듈의 존재 이유이다. 변경 기능: 대부분의 모듈이 생명주기 동안 변경 과정을 겪게 되고, 가능한 한 간단하게 그런 변경을 할 수 있도록 만드는 것이 개발자의 책임이다. 변경하기 어려운 모듈은 그것이 제대로 동작한다 하더라도 망가진 것이며 수리가 필요하다. 그것을 읽는 사람과 의사소통하는 기능: 개발자가 쉽게 읽고 이해할 수 있어야 한다. 모듈을 읽기 쉽고 변경하기 쉽게 만들기 위해서는 단순히 원칙과 패턴 이상의 그 무엇이 필요한데, 바로 주의력과 훈련이다. 주의력은 어떤 그냥 동작하게 만드는 것과 올바르게 동작하게 만드는 것의 차이이고, 프로그래머가 코드의 구조에 부여하는 가치와도 같다. 리팩토링? 외부 행위를 바꾸지 않으면서 .. 2022. 1. 14.