Merge pull request #59 from breml/static-interface-check
Add static interface implementation check
This commit is contained in:
commit
bb199b05e0
@ -13,6 +13,10 @@ var (
|
||||
lockPersonStoreMockGet sync.RWMutex
|
||||
)
|
||||
|
||||
// Ensure, that PersonStoreMock does implement PersonStore.
|
||||
// If this is not the case, regenerate this file with moq.
|
||||
var _ PersonStore = &PersonStoreMock{}
|
||||
|
||||
// PersonStoreMock is a mock implementation of PersonStore.
|
||||
//
|
||||
// func TestSomethingThatUsesPersonStore(t *testing.T) {
|
||||
|
@ -13,6 +13,10 @@ var (
|
||||
lockMyInterfaceMockTwo sync.RWMutex
|
||||
)
|
||||
|
||||
// Ensure, that MyInterfaceMock does implement MyInterface.
|
||||
// If this is not the case, regenerate this file with moq.
|
||||
var _ MyInterface = &MyInterfaceMock{}
|
||||
|
||||
// MyInterfaceMock is a mock implementation of MyInterface.
|
||||
//
|
||||
// func TestSomethingThatUsesMyInterface(t *testing.T) {
|
||||
|
2
main.go
2
main.go
@ -2,12 +2,12 @@ package main
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"errors"
|
||||
"flag"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"errors"
|
||||
|
||||
"github.com/matryer/moq/pkg/moq"
|
||||
)
|
||||
|
@ -172,6 +172,10 @@ func (m *Mocker) Mock(w io.Writer, name ...string) error {
|
||||
doc.Imports = append(doc.Imports, stripVendorPath(pkgToImport))
|
||||
}
|
||||
|
||||
if tpkg.Name() != m.pkgName {
|
||||
doc.SourcePackagePrefix = tpkg.Name() + "."
|
||||
}
|
||||
|
||||
var buf bytes.Buffer
|
||||
err = m.tmpl.Execute(&buf, doc)
|
||||
if err != nil {
|
||||
@ -263,6 +267,7 @@ func pkgInfoFromPath(src string) (*loader.PackageInfo, error) {
|
||||
|
||||
type doc struct {
|
||||
PackageName string
|
||||
SourcePackagePrefix string
|
||||
Objects []obj
|
||||
Imports []string
|
||||
}
|
||||
|
@ -42,6 +42,40 @@ func TestMoq(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestMoqWithStaticCheck(t *testing.T) {
|
||||
m, err := New("testpackages/example", "")
|
||||
if err != nil {
|
||||
t.Fatalf("moq.New: %s", err)
|
||||
}
|
||||
var buf bytes.Buffer
|
||||
err = m.Mock(&buf, "PersonStore")
|
||||
if err != nil {
|
||||
t.Errorf("m.Mock: %s", err)
|
||||
}
|
||||
s := buf.String()
|
||||
// assertions of things that should be mentioned
|
||||
var strs = []string{
|
||||
"package example",
|
||||
"var _ PersonStore = &PersonStoreMock{}",
|
||||
"type PersonStoreMock struct",
|
||||
"CreateFunc func(ctx context.Context, person *Person, confirm bool) error",
|
||||
"GetFunc func(ctx context.Context, id string) (*Person, error)",
|
||||
"func (mock *PersonStoreMock) Create(ctx context.Context, person *Person, confirm bool) error",
|
||||
"func (mock *PersonStoreMock) Get(ctx context.Context, id string) (*Person, error)",
|
||||
"panic(\"PersonStoreMock.CreateFunc: method is nil but PersonStore.Create was just called\")",
|
||||
"panic(\"PersonStoreMock.GetFunc: method is nil but PersonStore.Get was just called\")",
|
||||
"lockPersonStoreMockGet.Lock()",
|
||||
"mock.calls.Get = append(mock.calls.Get, callInfo)",
|
||||
"lockPersonStoreMockGet.Unlock()",
|
||||
"// ID is the id argument value",
|
||||
}
|
||||
for _, str := range strs {
|
||||
if !strings.Contains(s, str) {
|
||||
t.Errorf("expected but missing: \"%s\"", str)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestMoqExplicitPackage(t *testing.T) {
|
||||
m, err := New("testpackages/example", "different")
|
||||
if err != nil {
|
||||
@ -69,6 +103,34 @@ func TestMoqExplicitPackage(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestMoqExplicitPackageWithStaticCheck(t *testing.T) {
|
||||
m, err := New("testpackages/example", "different")
|
||||
if err != nil {
|
||||
t.Fatalf("moq.New: %s", err)
|
||||
}
|
||||
var buf bytes.Buffer
|
||||
err = m.Mock(&buf, "PersonStore")
|
||||
if err != nil {
|
||||
t.Errorf("m.Mock: %s", err)
|
||||
}
|
||||
s := buf.String()
|
||||
// assertions of things that should be mentioned
|
||||
var strs = []string{
|
||||
"package different",
|
||||
"var _ example.PersonStore = &PersonStoreMock{}",
|
||||
"type PersonStoreMock struct",
|
||||
"CreateFunc func(ctx context.Context, person *example.Person, confirm bool) error",
|
||||
"GetFunc func(ctx context.Context, id string) (*example.Person, error)",
|
||||
"func (mock *PersonStoreMock) Create(ctx context.Context, person *example.Person, confirm bool) error",
|
||||
"func (mock *PersonStoreMock) Get(ctx context.Context, id string) (*example.Person, error)",
|
||||
}
|
||||
for _, str := range strs {
|
||||
if !strings.Contains(s, str) {
|
||||
t.Errorf("expected but missing: \"%s\"", str)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TestVeradicArguments tests to ensure variadic work as
|
||||
// expected.
|
||||
// see https://github.com/matryer/moq/issues/5
|
||||
|
@ -8,6 +8,7 @@ var moqTemplate = `// Code generated by moq; DO NOT EDIT.
|
||||
// github.com/matryer/moq
|
||||
|
||||
package {{.PackageName}}
|
||||
{{- $sourcePackagePrefix := .SourcePackagePrefix}}
|
||||
|
||||
import (
|
||||
{{- range .Imports }}
|
||||
@ -22,6 +23,10 @@ var (
|
||||
{{- end }}
|
||||
)
|
||||
|
||||
// Ensure, that {{.InterfaceName}}Mock does implement {{.InterfaceName}}.
|
||||
// If this is not the case, regenerate this file with moq.
|
||||
var _ {{$sourcePackagePrefix}}{{.InterfaceName}} = &{{.InterfaceName}}Mock{}
|
||||
|
||||
// {{.InterfaceName}}Mock is a mock implementation of {{.InterfaceName}}.
|
||||
//
|
||||
// func TestSomethingThatUses{{.InterfaceName}}(t *testing.T) {
|
||||
|
@ -12,6 +12,10 @@ var (
|
||||
lockServiceMockUser sync.RWMutex
|
||||
)
|
||||
|
||||
// Ensure, that ServiceMock does implement Service.
|
||||
// If this is not the case, regenerate this file with moq.
|
||||
var _ dotimport.Service = &ServiceMock{}
|
||||
|
||||
// ServiceMock is a mock implementation of Service.
|
||||
//
|
||||
// func TestSomethingThatUsesService(t *testing.T) {
|
||||
|
@ -12,6 +12,10 @@ var (
|
||||
lockServiceMockDoSomething sync.RWMutex
|
||||
)
|
||||
|
||||
// Ensure, that ServiceMock does implement Service.
|
||||
// If this is not the case, regenerate this file with moq.
|
||||
var _ Service = &ServiceMock{}
|
||||
|
||||
// ServiceMock is a mock implementation of Service.
|
||||
//
|
||||
// func TestSomethingThatUsesService(t *testing.T) {
|
||||
|
1
pkg/vendor/github.com/matryer/somerepo/yep.go
generated
vendored
1
pkg/vendor/github.com/matryer/somerepo/yep.go
generated
vendored
@ -1,3 +1,4 @@
|
||||
package somerepo
|
||||
|
||||
// SomeType is some type
|
||||
type SomeType string
|
||||
|
Loading…
Reference in New Issue
Block a user