2014-10-14 1 views
1

Третий день. Пойдите, простите, если это новый вопрос;). Я создаю простой калькулятор, который в конечном итоге будет иметь множество разных задач: сложение, вычитание, умножение и т. Д. И т. Д. Каждая из задач будет иметь 2 функции: первый и второй.Как проверить функции интерфейса?

package main 

import (
    "github.com/mytestproj/calculator" 
) 

type Calc interface { 
    First(x int) int 
    Second(x int) int 
} 

func main() { 
    x := 16 
    var i Calc 
    a := calculator.Add{} 
    i = a 
    i.First(x) 
    i.Second(x) 
} 

Я в настоящее время есть все организовано как:

github.com/ 
    mytestproj/ 
     calculator/ 
     addition.go 
     addition_test.go 
     subtraction.go 
     subtraction_test.go 
    main/ 
     main.go 

В addition.go у меня есть:

package calculator 

type Add struct{} 

func BasicAddition(x int) int { // this won't be in the final release 
    return x + 2 
} 

func (h Add) First(x int) int { 
    x += 5 
    return x 
} 

func (h Add) Second(x int) int { 
    x += 10 
    return x 
} 

И в addition_test.go у меня есть:

package calculator 

import "testing" 

func TestBasicAddition(t *testing.T) { 
    x := 30 
    if y := BasicAddition(x); y != 32 { 
     t.Errorf("Mine is %v", y) 
    } 
} 

func TestFirst(t *testing.T) { 
    x := 10 
    if y := First(x); y != 15 { 
     t.Errorf("First is %v", y) 
    } 
} 

Когда я запускаю свой тест, я получаю сообщение об ошибке:

# github.com/mytestproj/calculator 
./addition_test.go:15: undefined: First 
FAIL github.com/mytestproj/calculator [build failed] 

Мой вопрос: Как проверить "в первую очередь?"

Если я удаляю тест для First полностью, тесты проходят нормально и проходят.

Вторичный вопрос: идея заключается в создании калькулятора с множеством различных функций. Если есть лучший способ организовать код, то, пожалуйста, дайте мне знать.

ответ

1

First - это метод по типу Add. Например,

a := Add{} 
a.First(x) 

addition.go

package calculator 

type Add struct{} 

func BasicAddition(x int) int { // this won't be in the final release 
    return x + 2 
} 

func (h Add) First(x int) int { 
    x += 5 
    return x 
} 

func (h Add) Second(x int) int { 
    x += 10 
    return x 
} 

addition_test.go

package calculator 

import "testing" 

func TestBasicAddition(t *testing.T) { 
    x := 30 
    if y := BasicAddition(x); y != 32 { 
     t.Errorf("Mine is %v", y) 
    } 
} 

func TestFirst(t *testing.T) { 
    x := 10 
    a := Add{} 
    if y := a.First(x); y != 15 { 
     t.Errorf("First is %v", y) 
    } 
} 

Выход:

$ go test -v 
=== RUN TestBasicAddition 
--- PASS: TestBasicAddition (0.00s) 
=== RUN TestFirst 
--- PASS: TestFirst (0.00s) 
PASS 
ok  so/calculator 0.002s 
$ 
Смежные вопросы