Expect(ACTUAL).To(Equal(EXPECTED))
reflect.DeepEqual
을 사용해서 ACTUAL
과 EXPECTED
를 비교합니다.BeEquivalentTo
를 사용해야 합니다.nil
이면 에러가 발생합니다.Expect(ACTUAL).To(BeEquivalentTo(EXPECTED))
Equal
과 동일하게 내부적으로 refelect.DeepEqual
을 사용해서 ACTUAL
과 EXPECTED
를 비교합니다.Equal
과 다르게 ACTUAL
의 타입을 EXPECTED
의 타입으로 변경한 후 비교를 합니다.nil
이면 에러가 발생합니다.Expect(5.1).Should(BeEquivalentTo(5))
Expect(5).ShouldNot(BeEquivalentTo(5.1))
BeNumerically()
을 사용해야 합니다.Expect(ACTUAL).To(BeIdenticalTo(EXPECTED))
Equal
과 동일하게 내부적으로 refelect.DeepEqual
을 사용해서 ACTUAL
과 EXPECTED
를 비교합니다.==
을 사용해서 값
을 비교합니다.nil
이면 에러가 발생합니다.Expect(ACTUAL).To(BeAssignableToTypeOf(EXPECTED))
ACTUAL
을 EXPECTED
와 같은 타입으로 할당할 수 있는지 비교합니다.nil
이면 에러가 발생합니다.Expect(ACTUAL).To(BeNil())
ACTUAL
이 nil인지 검사합니다.Expect(ACTUAL).To(BeZero())
ACTUAL
이 zero value인지 혹은 nil
인지 검사합니다.Expect(ACTUAL).To(BeTrue())
ACTUAL
이 true
인지 검사합니다.ACTUAL
이 bool
타입이어야 합니다.Expect(ACTUAL).To(BeFalse())
ACTUAL
이 false
인지 검사합니다.ACTUAL
이 bool
타입이어야 합니다.err := SomethingThatMightFail()
Expect(err).ToNot(HaveOccurred())
Expect(FUNCTION()).ToNot(HaveOccurred())
Expect(ACTUAL).To(MatchError(EXPECTED))
EXPECTED
가 문자열일 경우 ACTUAL.Error()
과 비교를 합니다.EXPECTED
가 error
일 경우 refelect.DeepEqaul
로 비교를 합니다.Expect(ACTUAL).To(BeClosed())
ACTUAL
이 닫힌 채널이면 통과합니다.read
를 시도합니다. 따라서
이후에 또 이 채널을 통해 뭔가를 검사한다면 이점을 명심해야 합니다.Expect(ACTUAL).To(Receive(<optionalPointer>))
ACTUAL
은 반드시 채널이어야 하고 send-only 채널이면 안됩니다.Receive
는 즉시 실행되며 블락킹하지 않습니다.c
에 데이터가 없다면 Expect(c).To(Receive())
는 실패하고
Expect(c).NotTo(Receive())
는 통과합니다.c
에 읽을 데이터가 있다면 Expect(c).To(Receive())
는 통과하고
Expect(c).NotTo(Receive())
는 실패합니다.c
가 닫혔다면 Expect(c).To(Receive())
는 실패하고
Expect(c).NotTo(Receive())
는 통과합니다.go func() {
time.Sleep(100 * time.Millisecond)
c <- true
}()
c
는 어떤 아무 값이나 받기 때문에 다음은
통과를 하게 됩니다.Eventually(c).To(Receive())
c
가 아무런 값을 받지 못한다면 타임아웃이 발생합니다.Consistently(c).NotTo(Receive())
Eventually(c).To(Receive(Equal("foo")))
Eventually
는 주기적으로 채널 c
를 폴링합니다. 건네받은 Matcher를 채우지
않는 채널에 오브젝트가 존재하는 경우, Matcher를 채우는 오브젝트가 수신 될
때까지 오브젝트는 꺼내져 삭제됩니다.var receivedBagel Bagel
Eventually(bagelChan).To(Receive(&receivedBagel)).
Expect(receivedBagel.Contents()).To(ContainElement("cream cheese"))
Expect(receivedBagel.Kind()).To(Equal("sesame"))
Expect(ACTUAL).To(BeSent(VALUE))
VALUE
를 channel ACTUAL
로 블락킹 없이 전송합니다. 성공하면 테스트가
통과합니다.ACTUAL
은
BeSent
는 블락킹하지 않습니다.
To(BeSent("foo"))
와 NotTo(BeSent("foot"))
둘다
실패합니다.Expect(ACTUAL).To(BeAnExistingFile())
ACTUAL
위치에 있으면 통과합니다.ACTUAL
은 파일경로 string
이어야 합니다.Expect(ACTUAL).To(BeARegularFile())
ACTUAL
위치에 있고 일반 파일이면 통과합니다.ACTUAL
은 파일경로 string
이어야 합니다.Expect(ACTUAL).To(BeARegularFile())
ACTUAL
위치에 존재하고 디렉토리면 통과합니다.ACTUAL
은 파일경로 string
이어야 합니다.Expect(ACTUAL).To(ContainSubstring(STRING, ARGS...))
ACTUAL
이 fmt.Sprintf(STRING, ARGS...)
을 포함하고 있으면 통과합니다.ACTUAL
은 string
, []byte
, Stringer(String()을 구현하고 있는)
중
하나여야 합니다. 그렇지 않으면 에러가 발생합니다.Expect(ACTUAL).To(HaveSuffix(STRING, ARGS...))
ACTUAL
이 fmt.Sprintf(STRING, ARGS...)
접미사를 가지고 있으면 통과합니다.ACTUAL
은 string
, []byte
, Stringer(String()을 구현하고 있는)
중
하나여야 합니다. 그렇지 않으면 에러가 발생합니다.Expect(ACTUAL).To(MatchJSON(EXPECTED))
ACTUAL
과 EXPECTED
가 같은 Object의 JSON표현이면 통과합니다.ACTUAL
과 EXPECTED
둘 다 string
, []byte
, Stringer(String()을 구현하고
있는)
중 하나여야 합니다. 그렇지 않으면 에러가 발생합니다.ACTUAL
과 EXPECTED
를 파싱하여 결과를 reflect.DeppEqual
로 비교합니다.ACTUAL
과 EXPECTED
둘다 올바른 JSON이 아니라면 에러가 발생합니다.Expect(ACTUAL).To(MatchXML(EXPECTED))
ACTUAL
과 EXPECTED
가 같은 Object의 XML표현이면 통과합니다.ACTUAL
과 EXPECTED
둘 다 string
, []byte
, Stringer(String()을 구현하고
있는)
중 하나여야 합니다. 그렇지 않으면 에러가 발생합니다.ACTUAL
과 EXPECTED
를 파싱하여 결과를 reflect.DeppEqual
로 비교합니다.ACTUAL
과 EXPECTED
둘다 올바른 XML이 아니라면 에러가 발생합니다.Expect(ACTUAL).To(MatchYAML(EXPECTED))
ACTUAL
과 EXPECTED
가 같은 Object의 YAML표현이면 통과합니다.ACTUAL
과 EXPECTED
둘 다 string
, []byte
, Stringer(String()을 구현하고
있는)
중 하나여야 합니다. 그렇지 않으면 에러가 발생합니다.ACTUAL
과 EXPECTED
를 파싱하여 결과를 reflect.DeppEqual
로 비교합니다.ACTUAL
과 EXPECTED
둘다 올바른 YAML이 아니라면 에러가 발생합니다.Expect(ACTUAL).To(BeEmpty())
ACTUAL
이 empty면 통과합니다.string
, array
, map
, chan
, slice
타입만 가능하고 다른 타입은 에러가
발생합니다.Expect(ACTUAL).To(HaveLen(INT))
ACTUAL
의 길이가 INT
와 같으면 통과합니다.string
, array
, map
, chan
, slice
타입만 가능하고 다른 타입은 에러가
발생합니다.Expect(ACTUAL).To(HaveCap(INT))
ACTUAL
의 capacity가 INT
와 같으면 통과합니다.array
, chan
, slice
타입만 가능하고 다른 타입은 에러가 발생합니다.Expect(ACTUAL).To(ContainElement(ELEMENT))
ACTUAL
이 ELEMENT
를 포함하고 있으면 통과합니다.string
, array
, map
, slice
타입만 가능하고 다른 타입은 에러가
발생합니다.map
타입의 경우는 map
의 키가아닌 값을 찾습니다.ContainElement()
는 Equal()
을 사용합니다. 하지만 인자로
GomegaMatcher
를 사용할수도 있습니다.Expect([]string{"Foo", "FooBar"}).To(ContainElement(ContainSubstring("Bar")))
Expect(ACTUAL).To(ConsistOf(ELEMENT1, ELEMENT2, ELEMENT3, ...))
or
Expect(ACTUAL).To(ConsistOf([]SOME_TYPE{ELEMENT1, ELEMENT2, ELEMENT3, ...}))
ACTUAL
이 정확하게 요소들을 가지고 있으면 통과합니다.ConsistOf()
는 Equal()
을 사용합니다. 하지만 인자로
GomegaMatcher
를 사용할수도 있습니다.Expect([]string{"Foo", "FooBar"}).To(ConsistOf("FooBar", "Foo"))
Expect([]string{"Foo", "FooBar"}).To(ConsistOf(ContainSubstring("Bar"), "Foo"))
Expect([]string{"Foo", "FooBar"}).To(ConsistOf(ContainSubstring("Foo"), ContainSubstring("Foo")))
array
, map
, slice
타입만 가능하고 다른 타입은 에러가map
타입의 경우는 map
의 키가아닌 값을 찾습니다.slice
를 입력할 수도 있습니다.Expect([]string{"Foo", "FooBar"}).To(ConsistOf([]string{"FooBar", "Foo"}))
Expect(ACTUAL).To(HaveKey(KEY))
ACTUAL
이 KEY
키를 가지고 있으면 통과합니다.ACTUAL
은 반드시 map
타입이어야 합니다.HaveKey()
는 Equal()
을 사용합니다. 하지만 인자로
GomegaMatcher
를 사용할수도 있습니다.Expect(map[string]string{"Foo": "Bar", "BazFoo": "Duck"}).To(HaveKey(MatchRegexp(`.+Foo$`)))
Expect(ACTUAL).To(HaveKeyWithValue(KEY, VALUE))
ACTUAL
이 키와 값이 같으면 통과합니다.ACTUAL
은 반드시 map
타입이어야 합니다.HaveKeyWithValue()
는 Equal()
을 사용합니다. 하지만 인자로
GomegaMatcher
를 사용할수도 있습니다.Expect(ACTUAL).To(BeNumerically(COMPARATOR_STRING, EXPECTED, <THRESHOLD>))
ACTUAL
과 EXPECTED
는 숫자 타입이어야 합니다.ACTUAL
과 EXPECTED
가 숫자가 아니면 에러가 발생합니다.ACTUAL
가 EXPECTED
보다
크면 통과합니다.ACTUAL
가 EXPECTED보다
크거나 같으면 통과합니다.ACTUAL
가 EXPECTED
보다
작으면 통과합니다.ACTUAL
가 EXPECTED
보다
작거나 같으면 통과합니다.Expect(ACTUAL).To(BeTemporally(COMPARATOR_STRING, EXPECTED_TIME, <THRESHOLD_DURATION>))
ACTUAL
은 반드시 time.Time
타입이어야 합니다.
ACTUAL
가
EXPECTED_TIME
과 같은 time.Time
이면 통과합니다.Expect(ACTUAL).To(Panic())
ACTUAL
이 함수이고 panic을 발생하면 통과합니다.ACTUAL
이 함수이고 아무런 argument가 없어야하고 결과도 아무런 결과를
리턴하지 않아야 합니다. 다른 타입들은 에러가 발생합니다.Expect(number).To(SatisfyAll(
BeNumerically(">", 0),
BeNumerically("<", 10)))
Expect(msg).To(SatisfyAny(
Equal("Success"),
MatchRegexp(`^Error .+$`)))
func BeBetween(min, max int) GomegaMatcher {
return SatisfyAll(
BeNumerically(">", min),
BeNumerically("<", max))
}
Expect(number).To(BeBetween(0, 10))
Expect(ACTUAL).To(And(MATCHER1, MATCHER2, ...))
Expect(ACTUAL).To(SatisfyAll(MATCHER1, MATCHER2, ...))
ACTUAL
이 모든 MATCHER들을 만족하면 통과합니다.Expect(ACTUAL).To(Or(MATCHER1, MATCHER2, ...))
Expect(ACTUAL).To(SatisfyAny(MATCHER1, MATCHER2, ...))
ACTUAL
이 MATCHER들중 하나라도 만족하면 통과합니다.Expect(ACTUAL).To(Not(MATCHER))
ACTUAL
이 Matcher를 통과하지 않다면 통과합니다.Expect(ACTUAL).To(WithTransform(TRANSFORM, MATCHER))
ACTUAL
을 TRANSFORM
함수를 이용하여 변형하여 Matcher를 통과하면 통과합니다.GetColor := func(e Element) Color { return e.Color }
Expect(element).To(WithTransform(GetColor, Equal(BLUE)))
// HaveColor returns a matcher that expects the element to have the given color.
func HaveColor(c Color) GomegaMatcher {
return WithTransform(func(e Element) Color {
return e.Color
}, Equal(c))
}
Expect(element).To(HaveColor(BLUE)))
자바스크립트로 직접 만들면서 배우는 - 자료구조와 알고리즘 강의 바로 가기
실습으로 마스터하는 OAuth 2.0: 기본부터 보안 위험까지 - OAuth 2.0 강의 바로 가기
기계인간 이종립, 소프트웨어 개발의 지혜 - Git 강의 바로 가기
코드숨에서 매주 스터디를 진행하고 있습니다. 메일을 등록하시면 새로운 스터디가 시작될 때 알려드릴게요!