agiledragon / gomonkey

gomonkey is a library to make monkey patching in unit tests easy
MIT License
2k stars 179 forks source link

privite value method mock failed #66

Closed quwang123 closed 2 years ago

quwang123 commented 2 years ago

import ( "crypto/md5" "fmt" "github.com/agiledragon/gomonkey/v2" "github.com/stretchr/testify/assert" "reflect" "testing" )

type PasswordHelper2 struct { }

func (p *PasswordHelper2) encodePassword(password string) string { return fmt.Sprintf("%x", md5.Sum([]byte(password+"test"))) }

func TestPrivateEncodePassword(t testing.T) { pHelper := PasswordHelper2{} var s PasswordHelper2 patches := gomonkey.ApplyPrivateMethod(reflect.TypeOf(s), "encodePassword", func(_ *PasswordHelper2, password string) string { return password + "test" }) defer patches.Reset()

assert.Equal(t, pHelper.encodePassword("123456"), "123456test")

}


faild code

package unit

import ( "crypto/md5" "fmt" "github.com/agiledragon/gomonkey/v2" "github.com/stretchr/testify/assert" "reflect" "testing" )

type PasswordHelper2 struct { }

func (p PasswordHelper2) encodePassword(password string) string { return fmt.Sprintf("%x", md5.Sum([]byte(password+"test"))) }

func TestPrivateEncodePassword(t *testing.T) { pHelper := PasswordHelper2{} var s PasswordHelper2 patches := gomonkey.ApplyPrivateMethod(reflect.TypeOf(s), "encodePassword", func(_ PasswordHelper2, password string) string { return password + "test" }) defer patches.Reset()

assert.Equal(t, pHelper.encodePassword("123456"), "123456test")

}

agiledragon commented 2 years ago

zhangxiaolongdeMacBook-Pro:test zhangxiaolong$ go version go version go1.16.9 darwin/amd64 zhangxiaolongdeMacBook-Pro:test zhangxiaolong$ go test -gcflags=all=-l apply_private_method_test.go -v === RUN TestApplyPrivate

TestApplyPrivate patch private method in the different package ✔

1 total assertion

--- PASS: TestApplyPrivate (0.00s) PASS ok command-line-arguments (cached)

quwang123 commented 2 years ago

zhangxiaolongdeMacBook-Pro:test zhangxiaolong$ go version go version go1.16.9 darwin/amd64 zhangxiaolongdeMacBook-Pro:test zhangxiaolong$ go test -gcflags=all=-l apply_private_method_test.go -v === RUN TestApplyPrivate

TestApplyPrivate patch private method in the different package ✔

1 total assertion

--- PASS: TestApplyPrivate (0.00s) PASS ok command-line-arguments (cached)

yes

quwang123 commented 2 years ago
  • platform: mac intel
  • go verison: go1.16.5 darwin/amd64
  • gomonkey version: v2.3.0
  • problem: go test apply_private_method_test.go failed
  • successed code:
package unit

import (
  "crypto/md5"
  "fmt"
  "github.com/agiledragon/gomonkey/v2"
  "github.com/stretchr/testify/assert"
  "reflect"
  "testing"
)

type PasswordHelper2 struct {
}

func (p *PasswordHelper2) encodePassword(password string) string {
  return fmt.Sprintf("%x", md5.Sum([]byte(password+"test")))
}

func TestPrivateEncodePassword(t *testing.T) {
  pHelper := PasswordHelper2{}
  var s *PasswordHelper2
  patches := gomonkey.ApplyPrivateMethod(reflect.TypeOf(s), "encodePassword", func(_ *PasswordHelper2, password string) string {
      return password + "test"
  })
  defer patches.Reset()

  assert.Equal(t, pHelper.encodePassword("123456"), "123456test")

}

faild code

package unit

import (
  "crypto/md5"
  "fmt"
  "github.com/agiledragon/gomonkey/v2"
  "github.com/stretchr/testify/assert"
  "reflect"
  "testing"
)

type PasswordHelper2 struct {
}

func (p PasswordHelper2) encodePassword(password string) string {
  return fmt.Sprintf("%x", md5.Sum([]byte(password+"test")))
}

func TestPrivateEncodePassword(t *testing.T) {
  pHelper := PasswordHelper2{}
  var s PasswordHelper2
  patches := gomonkey.ApplyPrivateMethod(reflect.TypeOf(s), "encodePassword", func(_ PasswordHelper2, password string) string {
      return password + "test"
  })
  defer patches.Reset()

  assert.Equal(t, pHelper.encodePassword("123456"), "123456test")

}

can you test the faild code ?