나는 골란에 대해 상당히 새로운 지식을 가지고 있으며, 간단한 작업으로 어려움을 겪고 있습니다.골란에서 특정 방법만을 모의 사용하는 방법
나는 golang
type struct A {
}
func (s *A) GetFirst() {
s.getSecond()
}
func (s *A) getSecond() {
// do something
}
에 다음과 같은 클래스가 그리고 나는 그러나 내가 getSecond()
을 재정의 할 필요가하기에 대한 몇 가지 테스트를 작성하고자합니다. 내 테스트 파일
type Ai interface {
getSecond()
}
type testA struct {
A
}
func (s *testA) getSecond() {
// do nothing
}
func TestA(t *testing.T) {
a := &A{}
t := &testA{A: a}
t.GetFirst()
}
여기 아이디어는 그러나이 작동하지 않는 내장 사용하여 인터페이스를 재정의 할 getSecond()
방법을 노출하는 것입니다에서 다음을 수행하려고했습니다. 테스트는 여전히 나의 조롱 한 대신 getSecond()
의 원래 구현을 호출합니다.
하나 개의 솔루션은 물론 getFirst()
및 getSecond()
다음 테스트에 구현하는 구조체를 생성을 포함하는 A의 적절한 인터페이스를 생성하는 것 모두 getFirst()
호출 원래 구현 및 getSecond()
더미 그러나 나는 이것이 복잡하지 느끼는 경우 일을하는 올바른 방법.
또 다른 가능성은 실제 구현의 getSecond()
을 변수에 할당하고 테스트에서 변수를 무시하는 것일 수 있습니다.하지만 단순한 무시를 위해이 작업을 수행하는 것이 조금 이상하다고 생각할 수도 있습니다.
나는 이것에 대해 완전히 잘못 알고 있습니까? golang을 사용하여이 작업을 수행하는 간단한 방법이 있습니까?
는 왜 두 방법 중 하나를 조롱하고 싶어 다른 구현을 가지고? 진짜 이유는 무엇입니까? 정말 잘 작동하는 것은 :'모든'내부에 접근 할 수있는 것처럼 쉬운 'A'를 만들고,'getFirst()'와'getSecond()'가 원하는 결과를 생성하는지 확인하십시오. 린스하고 반복하십시오. 표준 라이브러리를 살펴보십시오. 어쩌면 당신은 여전히 다른 언어의 영향을 받고 있으며'getFirst()'는'getSecond()'를 사용하여'getSecond()'를 조롱해야한다고 생각하게 만듭니다. 아니요,'getSecond()'가'A'의 상태를 통해 무엇을하는지 제어 할 수 있습니다. 그리고 제발 : Goter에는 getter가 없습니다 (golang이 아닙니다). – Volker
실제로 getters는 게터가 아니며 예제에서 그 함수의 이름을 지정하기로했습니다. getFirst는 단위 테스트 상황에서 작동하지 않는 물건을 수행하는 getSecond를 호출합니다. – ByteFlinger
더 정확하게 말하십시오. A에는 baseUrl이 있고 getFirst()는 http 요청을 수행하지만 요청하기 전에 url 기본 도메인을 다시 작성하여 getdomain (getSecond()가 수행하는 작업)에 따라 하위 도메인을 포함해야합니다. 이로 인해 http : //subdomain.127.0.0.1로 끝나는 httptest 패키지에서 문제가 발생합니다. – ByteFlinger