Skip to content

Instantly share code, notes, and snippets.

@dproject21
Created September 29, 2018 08:01
Show Gist options
  • Save dproject21/4a4c0cb44dcbf1f55d735ab5e9ccc935 to your computer and use it in GitHub Desktop.
Save dproject21/4a4c0cb44dcbf1f55d735ab5e9ccc935 to your computer and use it in GitHub Desktop.
20180929 tddbc tokyo golang implementation
package vending
import (
"testing"
"github.com/stretchr/testify/assert"
)
func Test500円を入れる(t *testing.T) {
vendingMachine := NewVendingMachine()
actual := vendingMachine.InsertCoin(500)
assert.True(t, actual)
}
func Test100円を入れる(t *testing.T) {
vendingMachine := NewVendingMachine()
actual := vendingMachine.InsertCoin(100)
assert.True(t, actual)
}
func Test50円を入れる(t *testing.T) {
vendingMachine := NewVendingMachine()
actual := vendingMachine.InsertCoin(50)
assert.True(t, actual)
}
func Test10円を入れる(t *testing.T) {
vendingMachine := NewVendingMachine()
actual := vendingMachine.InsertCoin(10)
assert.True(t, actual)
}
func Test1000円コインは存在しないので受け付けられない(t *testing.T) {
vendingMachine := NewVendingMachine()
actual := vendingMachine.InsertCoin(1000)
assert.False(t, actual)
}
func Test100円が入っているチェック(t *testing.T) {
vendingMachine := NewVendingMachine()
vendingMachine.InsertCoin(100)
actual := vendingMachine.HaveMoney(100)
assert.True(t, actual)
}
func Test100円が入っている状態でボタンを押すとコーラが出る(t *testing.T) {
vendingMachine := NewVendingMachine()
vendingMachine.InsertCoin(100)
actual := vendingMachine.PushButton("コーラ")
assert.Equal(t, "コーラ", actual)
}
func Test100円が入っていない状態でボタンを押してもコーラが出てこない(t *testing.T) {
vendingMachine := NewVendingMachine()
actual := vendingMachine.PushButton("コーラ")
assert.Equal(t, "", actual)
}
func Test100円が入っている状態でボタンを押すと烏龍茶が出る(t *testing.T) {
vendingMachine := NewVendingMachine()
vendingMachine.InsertCoin(100)
actual := vendingMachine.PushButton("烏龍茶")
assert.Equal(t, "烏龍茶", actual)
}
func Test100円が入っていない状態でボタンを押すと烏龍茶が出てこない(t *testing.T) {
vendingMachine := NewVendingMachine()
actual := vendingMachine.PushButton("烏龍茶")
assert.Equal(t, "", actual)
}
func Test200円が入っているチェック(t *testing.T) {
vendingMachine := NewVendingMachine()
vendingMachine.InsertCoin(100)
vendingMachine.InsertCoin(100)
actual := vendingMachine.HaveMoney(200)
assert.True(t, actual)
}
func Test300円が入っているチェック(t *testing.T) {
vendingMachine := NewVendingMachine()
vendingMachine.InsertCoin(100)
vendingMachine.InsertCoin(100)
vendingMachine.InsertCoin(100)
actual := vendingMachine.HaveMoney(300)
assert.True(t, actual)
}
func Test200円が入っている状態でボタンを押すとレッドブルが出る(t *testing.T) {
vendingMachine := NewVendingMachine()
vendingMachine.InsertCoin(100)
vendingMachine.InsertCoin(100)
actual := vendingMachine.PushButton("レッドブル")
assert.Equal(t, "レッドブル", actual)
}
func Test200円が入っていない状態でボタンを押すとレッドブルが出てこない(t *testing.T) {
vendingMachine := NewVendingMachine()
actual := vendingMachine.PushButton("レッドブル")
assert.Equal(t, "", actual)
}
func Test300円が入っている状態でボタンを押すとアサイードリンクが出る(t *testing.T) {
vendingMachine := NewVendingMachine()
vendingMachine.InsertCoin(100)
vendingMachine.InsertCoin(100)
vendingMachine.InsertCoin(100)
actual := vendingMachine.PushButton("アサイードリンク")
assert.Equal(t, "アサイードリンク", actual)
}
func Test300円が入っていない状態でボタンを押すとアサイードリンクが出てこない(t *testing.T) {
vendingMachine := NewVendingMachine()
actual := vendingMachine.PushButton("アサイードリンク")
assert.Equal(t, "", actual)
}
func Test100円を入れるとコーラのボタンが光ることが確認できる(t *testing.T) {
vendingMachine := NewVendingMachine()
vendingMachine.InsertCoin(100)
actual := vendingMachine.OnLightButton("コーラ")
assert.True(t, actual)
}
func Test100円を入れてもレッドブルのボタンは光っていないことが確認できる(t *testing.T) {
vendingMachine := NewVendingMachine()
vendingMachine.InsertCoin(100)
actual := vendingMachine.OnLightButton("レッドブル")
assert.False(t, actual)
}
func Test50円を2回入れるとコーラを買える(t *testing.T) {
vendingMachine := NewVendingMachine()
vendingMachine.InsertCoin(50)
vendingMachine.InsertCoin(50)
actual := vendingMachine.PushButton("コーラ")
assert.Equal(t, "コーラ", actual)
}
func Test50円を2回入れてもレッドブルは買えない(t *testing.T) {
vendingMachine := NewVendingMachine()
vendingMachine.InsertCoin(50)
vendingMachine.InsertCoin(50)
actual := vendingMachine.PushButton("レッドブル")
assert.Equal(t, "", actual)
}
func Test200円入れてコーラを買ったら100円のお釣りが受け取ることができる(t *testing.T) {
vendingMachine := NewVendingMachine()
vendingMachine.InsertCoin(100)
vendingMachine.InsertCoin(100)
vendingMachine.PushButton("コーラ")
actual := vendingMachine.BackMoney()
assert.Equal(t, 100, actual)
}
func Test200円入れてレッドブルを買ったら0円のお釣りが受け取ることができる(t *testing.T) {
vendingMachine := NewVendingMachine()
vendingMachine.InsertCoin(100)
vendingMachine.InsertCoin(100)
vendingMachine.PushButton("レッドブル")
actual := vendingMachine.BackMoney()
assert.Equal(t, 0, actual)
}
func Test100円入れてコーラを買ったら追加で100円入れないと烏龍茶は買えない(t *testing.T) {
vendingMachine := NewVendingMachine()
vendingMachine.InsertCoin(100)
haveCola := vendingMachine.PushButton("コーラ")
assert.Equal(t, "コーラ", haveCola)
notHaveTea := vendingMachine.PushButton("烏龍茶")
assert.Equal(t, "", notHaveTea)
vendingMachine.InsertCoin(100)
haveTea := vendingMachine.PushButton("烏龍茶")
assert.Equal(t, "烏龍茶", haveTea)
}
// ----------------------------------
// 余談 : Goでのテーブル駆動テストサンプル
// ----------------------------------
func Test投入できるコインの種類を確認する(t *testing.T) {
var testCases = []struct {
desc string
coin int
canInsert bool
}{
{"1000円コインはない", 1000, false},
{"10円コインはある", 10, true},
{"100円コインはある", 100, true},
{"50円コインはない", 50, true},
{"500円コインはない", 500, true},
}
for _, test := range testCases {
vendingMachine := NewVendingMachine()
actual := vendingMachine.InsertCoin(test.coin)
assert.Equal(t, test.canInsert, actual, test.desc)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment