흐르는 시간의 블로그...

Golang 프로젝트에 TDD 도입하기 - Golang Korean Community

위의 내용에 따라 간단한 테스트를 진행해 봤다.

이와 함께 assertion 패키지를 인스톨하고 사용했다.

if문으로 도배될 많은 테스트 코드들을 위해서 assertion은 필수라고 생각한다.


원래의 테스트 코드는 아래와 같이 if와 else로 구성할 수 밖에 없다.

func TestGetWords(t *testing.T) {
	if words, err := dbjobs.GetWords(); nil != err {
		t.Error("GetWords() return error. " + err.Error())
	} else {
		tWord := []string{"a", "c", "d", "xxdfs", "ワード"}

		isSame := true
		for i, _ := range words {
			if words[i] != tWord[i] {
				isSame = false
				break
			}
		}

		if isSame {
			t.Logf("result is %v", words)
		} else {
			t.Errorf("Value is Not valid. \n first %v \n second %v", tWord, words)
		}
	}
}


github.com/stretchr/testify 패키지를 인스톨하고 assert로 변경한 코드이다.

func TestGetWords(t *testing.T) {
	assert.Equal(t, 123, 125, "they should be equal")
	assert.NotEqual(t, 123, 456, "they should not be equal")

	words, err := dbjobs.GetWords()

	assert.Nil(t, err)

	t1Word := []string{"a", "c", "d", "xxdfs", "ワード"}
	assert.Equal(t, t1Word, words, "Words are not what I want.")

	t2Word := []string{"a", "b", "c", "d", "xxdfs", "ワード"}
	assert.Equal(t, t2Word, words, "Words are not what I want.")
}


assertion 사용에 따른 결과는 아래와 같다.

	Error Trace:	job4mariadb_test.go:32
	Error:      	Not equal: 
	            	expected: 123
	            	actual: 125
	Messages:   	they should be equal
	Error Trace:	job4mariadb_test.go:40
	Error:      	Not equal: 
	            	expected: []string{"a", "c", "d", "xxdfs", "ワード"}
	            	actual: []string{"a", "b", "c", "d", "xxdfs", "ワード"}
	            	
	            	Diff:
	            	--- Expected
	            	+++ Actual
	            	@@ -1,3 +1,4 @@
	            	-([]string) (len=5) {
	            	+([]string) (len=6) {
	            	  (string) (len=1) "a",
	            	+ (string) (len=1) "b",
	            	  (string) (len=1) "c",
	Messages:   	Words are not what I want.




-꼬리-

* 티스토리의 스타일 변경을 했다가 오랜 시간 기존 작성글들을 다시 수정해야 했다.

* 그 과정에서 오늘자로 작성한 내용이 날아갔다. ㅠ.ㅠ

* 그래서 간략히 다시 작성


Go에서 테스트 작성하기 - 예제로 배우는 GO 프로그래밍

위의 내용을 참고하여 job4mariadb_test.go를 만들고 테스트를 하였다.

gogland에서 자동완성으로 테스트명과 테스트 함수를 편하게 생성할 수 있다.

또한 해당 파일만을 컴파일할때는 자동으로 go test를 실행해준다


package dbjobs_test

import (
	"testing"
	"asker/theWords/dbjobs"
)

func TestGetWords(t *testing.T) {
	if words, err := dbjobs.GetWords(); nil != err {
		t.Error("GetWords() return error. " + err.Error())
	} else {
		tWord := []string{"a", "b", "c", "d", "xxdfs", "ワード"}

		isSame := true
		for i := range words {
			if words[i] != tWord[i] {
				isSame = false
				break
			}
		}

		if isSame {
			t.Logf("result is %v", words)
		} else {
			t.Errorf("Value is Not valid. \n first %v \n second %v", tWord, words)
		}
	}
}




주류에 속하지 못한 나같은 개발자의 삶은 희망하다 꺽이는 것이 일상이다.

비슷한 목표로 작업을 함께하고 코드에 대해 얘기해보고 싶다.

하는 일에 대한 조언을 주고 받거나 경쟁을 해보고 싶기도 하다.

가장 원하는 것은 팀으로 함께 일한 결과로 성과를 만들어내는 뿌듯함을 느껴보고 싶다.

현재에는 전혀 그렇게 하지 못하고 있다. 

SW 개발은 내가 좋아했고 지금도 좋아하는 일이며 생계를 이어가는 도구이다.

초보 수준의 내용이라도 꾸준히 다시 짚는게 필요하다.

자주 쓰지 않으면 금방 잊혀진다.

일일단위의 기록을 작성해 보고자 한다.


웹팀의 요청으로 나름 널널한 내가 작업을 진행하기로 했다.

잘 모르지만 하면 또 잘하는 착한 서포터다. 걍 시작해보자.

현재 시점 2017년8월말 기점이다. 

이후 작업 방식은 또 바뀔지 모른다. 

아래의 방법 말고 다른 방법도 많이 있으리라 생각한다.



목표: 도쿄(AP1)의 인스턴스를 서울(AP2)로 그대로 옮겨서 실행한다

---- 도쿄 리전 작업 ----

1. 인스턴스 메뉴에서 인스턴스 중단

2. 원하는 인스턴스를 선택하고 Image - Create Image를 선택하여 AMI 생성



3. 생성 이미지 및 Snapshots 확인

 - IMAGES - AMIs에 이미지 생성 확인

 - ELASTIC BLOCK STORE - Snapshots에 스냅샷 생성 확인


4. AMI를 원하는 리전으로 복사



---- 서울 리전 작업 ----

5. AMI와 스냅샷 복사 확인

 - 인터넷 자료들에는 스냅샷을 따로 복사하는 것으로 설명한다

 - 실제 작업시는 그리 했으나 내용을 살펴보니 AMI 생성시 스냅샷이 함께 생성되고 복사할때도 함께 복사된다

 - 만약 볼륨이 두개 이상이면 별도의 스냅샷을 진행하거나 AMI 생성시 추가 볼륨을 선택하면 함께 진행될 것이다


6. 인스턴스 실행

 - 실행시에 리뷰를 보면 Storage에 함께 복사한 스냅샷이 들어온 것을 볼 수 있다

 - 이를 실행하면 KEY PAIR를 지정해야 한다

 - 리전이 다르므로 서울리전(AP2)의 기존 키를 사용하든 생성하여 진행하면 된다