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 강의 바로 가기
코드숨에서 매주 스터디를 진행하고 있습니다. 메일을 등록하시면 새로운 스터디가 시작될 때 알려드릴게요!