logtest.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. package logtest
  2. import (
  3. "bytes"
  4. "encoding/json"
  5. "io"
  6. "testing"
  7. "github.com/zeromicro/go-zero/core/logx"
  8. )
  9. type Buffer struct {
  10. buf *bytes.Buffer
  11. t *testing.T
  12. }
  13. func Discard(t *testing.T) {
  14. prev := logx.Reset()
  15. logx.SetWriter(logx.NewWriter(io.Discard))
  16. t.Cleanup(func() {
  17. logx.SetWriter(prev)
  18. })
  19. }
  20. func NewCollector(t *testing.T) *Buffer {
  21. var buf bytes.Buffer
  22. writer := logx.NewWriter(&buf)
  23. prev := logx.Reset()
  24. logx.SetWriter(writer)
  25. t.Cleanup(func() {
  26. logx.SetWriter(prev)
  27. })
  28. return &Buffer{
  29. buf: &buf,
  30. t: t,
  31. }
  32. }
  33. func (b *Buffer) Bytes() []byte {
  34. return b.buf.Bytes()
  35. }
  36. func (b *Buffer) Content() string {
  37. var m map[string]interface{}
  38. if err := json.Unmarshal(b.buf.Bytes(), &m); err != nil {
  39. b.t.Error(err)
  40. return ""
  41. }
  42. content, ok := m["content"]
  43. if !ok {
  44. return ""
  45. }
  46. switch val := content.(type) {
  47. case string:
  48. return val
  49. default:
  50. bs, err := json.Marshal(content)
  51. if err != nil {
  52. b.t.Error(err)
  53. return ""
  54. }
  55. return string(bs)
  56. }
  57. }
  58. func (b *Buffer) Reset() {
  59. b.buf.Reset()
  60. }
  61. func (b *Buffer) String() string {
  62. return b.buf.String()
  63. }