From b6f0a0f3fc650f4977c0b6869f5e4e717c1c0f24 Mon Sep 17 00:00:00 2001 From: Doug Fawley Date: Wed, 9 Jan 2019 12:52:40 -0800 Subject: [PATCH] grpctest: add example to show how it is used (#2552) --- internal/grpctest/example_test.go | 61 +++++++++++++++++++++++++++++++ internal/grpctest/grpctest.go | 11 +++++- 2 files changed, 70 insertions(+), 2 deletions(-) create mode 100644 internal/grpctest/example_test.go diff --git a/internal/grpctest/example_test.go b/internal/grpctest/example_test.go new file mode 100644 index 00000000..d0a62bc0 --- /dev/null +++ b/internal/grpctest/example_test.go @@ -0,0 +1,61 @@ +/* + * + * Copyright 2019 gRPC authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + +package grpctest_test + +import ( + "testing" + + "google.golang.org/grpc/internal/grpctest" +) + +type s struct { + i int +} + +func (s *s) Setup(t *testing.T) { + t.Log("Per-test setup code") + s.i = 5 +} + +func (s *s) TestSomething(t *testing.T) { + t.Log("TestSomething") + if s.i != 5 { + t.Errorf("s.i = %v; want 5", s.i) + } + s.i = 3 +} + +func (s *s) TestSomethingElse(t *testing.T) { + t.Log("TestSomethingElse") + if got, want := s.i%4, 1; got != want { + t.Errorf("s.i %% 4 = %v; want %v", got, want) + } + s.i = 3 +} + +func (s *s) Teardown(t *testing.T) { + t.Log("Per-test teardown code") + if s.i != 3 { + t.Fatalf("s.i = %v; want 3", s.i) + } +} + +func TestExample(t *testing.T) { + grpctest.RunSubTests(t, &s{}) +} diff --git a/internal/grpctest/grpctest.go b/internal/grpctest/grpctest.go index ef2c4a13..d5988471 100644 --- a/internal/grpctest/grpctest.go +++ b/internal/grpctest/grpctest.go @@ -37,8 +37,15 @@ func getTestFunc(t *testing.T, xv reflect.Value, name string) func(*testing.T) { } // RunSubTests runs all "Test___" functions that are methods of x as subtests -// of the current test. If x contains Setup/Teardown functions, those are run -// before/after each of the test functions, respectively. +// of the current test. If x contains methods "Setup(*testing.T)" or +// "Teardown(*testing.T)", those are run before or after each of the test +// functions, respectively. +// +// For example usage, see example_test.go. Run it using: +// $ go test -v -run TestExample . +// +// To run a specific test/subtest: +// $ go test -v -run 'TestExample/^Something$' . func RunSubTests(t *testing.T, x interface{}) { xt := reflect.TypeOf(x) xv := reflect.ValueOf(x)