feat: add unit test

This commit is contained in:
2019-09-20 01:24:50 +02:00
parent ced985da52
commit 779cd1da6e
7 changed files with 270 additions and 6 deletions

View File

@@ -3,7 +3,7 @@ package hamster_tycoon
import (
"errors"
"fmt"
"math/rand"
"hamster-tycoon/randomizer"
)
const (
@@ -56,7 +56,7 @@ func (h *Hamster) Fuck(another *Hamster) (bool, error) {
return false, errors.New("can't fuck together")
}
if h.Age <= GestationMinAge || another.Age <= GestationMinAge {
if h.Age < GestationMinAge || another.Age < GestationMinAge {
return false, errors.New("one of the hamster is too young")
}
@@ -128,5 +128,5 @@ func randSexe() string {
}
func randNumber(min int, max int) int {
return min + rand.Intn(max-min)
return min + randomizer.Rand(max-min)
}

View File

@@ -2,6 +2,8 @@ package hamster_tycoon
import (
"errors"
"hamster-tycoon/randomizer"
"reflect"
"testing"
)
@@ -45,6 +47,21 @@ func TestFuck(t *testing.T) {
expectedResult bool
expectedError error
}{
{
caseName: "Same sexe",
hamster1: &Hamster{
Alive: true,
Sexe: MALE,
Age: GestationMinAge - 1,
},
hamster2: &Hamster{
Alive: true,
Sexe: MALE,
Age: GestationMinAge + 1,
},
expectedResult: false,
expectedError: errors.New("can't fuck together"),
},
{
caseName: "Hamster 1 too young",
hamster1: &Hamster{
@@ -75,17 +92,199 @@ func TestFuck(t *testing.T) {
expectedResult: false,
expectedError: errors.New("one of the hamster is too young"),
},
{
caseName: "Can have sexe and success",
hamster1: &Hamster{
Alive: false,
Sexe: MALE,
Age: GestationMinAge,
},
hamster2: &Hamster{
Alive: true,
Sexe: FEMALE,
Age: GestationMinAge,
},
expectedResult: true,
expectedError: nil,
},
{
caseName: "Can have sexe and fail",
hamster1: &Hamster{
Alive: false,
Sexe: MALE,
Age: GestationMinAge,
},
hamster2: &Hamster{
Alive: true,
Sexe: FEMALE,
Age: GestationMinAge,
},
expectedResult: false,
expectedError: nil,
},
{
caseName: "Can have sexe and success. Inverted female and male",
hamster2: &Hamster{
Alive: false,
Sexe: MALE,
Age: GestationMinAge,
},
hamster1: &Hamster{
Alive: true,
Sexe: FEMALE,
Age: GestationMinAge,
},
expectedResult: true,
expectedError: nil,
},
}
for _, tc := range testCases {
t.Run(tc.caseName, func(t *testing.T) {
if tc.expectedResult {
randomizer.FakeRandomizer(60)
} else {
randomizer.FakeRandomizer(80)
}
bool, err := tc.hamster1.Fuck(tc.hamster2)
if tc.expectedResult != bool {
t.Errorf("Fuck result does not match expectation. \n Got : %t \n Get : %t", tc.expectedResult, bool)
}
if tc.expectedError.Error() != err.Error() {
if tc.expectedError != nil && err != nil && tc.expectedError.Error() != err.Error() {
t.Errorf("Fuck result does not match expectation. \n Got : %s \n Get : %s", tc.expectedError, err)
}
if tc.expectedError == nil && err != nil {
t.Errorf("Fuck result does not match expectation. \n Got error : %s ", err)
}
if tc.expectedResult {
var female *Hamster
if FEMALE == tc.hamster1.Sexe {
female=tc.hamster1
} else {
female=tc.hamster2
}
if !female.Gestation {
t.Errorf("Female is not in gestation")
}
if female.GestationPeriod != 0 {
t.Errorf("Gestation period doesn't have been reseted")
}
if female.GestationCooldown != TotalGestationPeriod + GestationCooldown {
t.Errorf("Gestation period doesn't have been reseted")
}
}
})
}
}
func TestHamster_Die(t *testing.T) {
tests := []struct {
name string
h *Hamster
}{
// TODO: Add test cases.
}
for _, tt := range tests {
tt.h.Die()
}
}
func TestHamster_Fuck(t *testing.T) {
type args struct {
another *Hamster
}
tests := []struct {
name string
h *Hamster
args args
want bool
wantErr bool
}{
// TODO: Add test cases.
}
for _, tt := range tests {
got, err := tt.h.Fuck(tt.args.another)
if (err != nil) != tt.wantErr {
t.Errorf("%q. Hamster.Fuck() error = %v, wantErr %v", tt.name, err, tt.wantErr)
continue
}
if got != tt.want {
t.Errorf("%q. Hamster.Fuck() = %v, want %v", tt.name, got, tt.want)
}
}
}
func TestBorn(t *testing.T) {
type args struct {
father *Hamster
mother *Hamster
}
tests := []struct {
name string
args args
want []*Hamster
wantErr bool
}{
// TODO: Add test cases.
}
for _, tt := range tests {
got, err := Born(tt.args.father, tt.args.mother)
if (err != nil) != tt.wantErr {
t.Errorf("%q. Born() error = %v, wantErr %v", tt.name, err, tt.wantErr)
continue
}
if !reflect.DeepEqual(got, tt.want) {
t.Errorf("%q. Born() = %v, want %v", tt.name, got, tt.want)
}
}
}
func Test_randNumberChild(t *testing.T) {
tests := []struct {
name string
want int
}{
// TODO: Add test cases.
}
for _, tt := range tests {
if got := randNumberChild(); got != tt.want {
t.Errorf("%q. randNumberChild() = %v, want %v", tt.name, got, tt.want)
}
}
}
func Test_randSexe(t *testing.T) {
tests := []struct {
name string
want string
}{
// TODO: Add test cases.
}
for _, tt := range tests {
if got := randSexe(); got != tt.want {
t.Errorf("%q. randSexe() = %v, want %v", tt.name, got, tt.want)
}
}
}
func Test_randNumber(t *testing.T) {
type args struct {
min int
max int
}
tests := []struct {
name string
args args
want int
}{
// TODO: Add test cases.
}
for _, tt := range tests {
if got := randNumber(tt.args.min, tt.args.max); got != tt.want {
t.Errorf("%q. randNumber() = %v, want %v", tt.name, got, tt.want)
}
}
}