На информационном ресурсе применяются рекомендательные технологии (информационные технологии предоставления информации на основе сбора, систематизации и анализа сведений, относящихся к предпочтениям пользователей сети "Интернет", находящихся на территории Российской Федерации)

ГрувиМэн (эпизод1) Поможет вам тестировать код

Простой Java программист уже много дней пишет online игру "Дурак". Пишет на голой Java: сервлеты, jsp странички и javascript. И, конечно же, он использует JUnit для UNIT тестирования. Примерно вот такие вот тесты:


Player player1 = new Player ();
player1.setName ("John");
player1.setCards ("6h7h8h9h10h");

Player player2 = new Player ();
player2.setName ("Bill");
player2.setCards (.

..



после чего код по установке кард на столе, колоды и т.д.


game.attack (player1, listOfCards);
game.defend (player2, listOfPairs);


и уже после код, которые проверял


assert player1.hasCards("h6");


Простой Java программист расстроен, видя, как много кода занимают тесты. Каждый тест - 15-20 строк (с учетом того, что часть pre и post вызовов выноситься за рамки одного теста). И главное, так лень писать тест за тестом, они такие большие, но, то тут, то там, обнаруживается ошибка, то в AI, то в логике... И нужно бы добавить ещё один тест...




Время для ГрувиМэна, который спасет ваш проект, написав билдер для тестирования!




class TestBuilder {
def players
def deck
def table

static runTest(args, closure){
def tb = new TestBuilder(args)
closure.delegate = tb
closure()
}

def methodMissing(String name, args){
handle name, args
}

def propertyMissing(String name){
Object[] emptyArray = []
handle name, emptyArray
}

def handle(String name, args){
def player = players.find {it.name == name.split ('_')[0]}
def action = name.split ('_')[1]

if (action == "Has")
assert player.hasCards (args[0])
//we can get a player with this name, and process an action
}
}

class Person{
def name
def cards

def hasCards (String cards){
//test
}
}

def john = new Person (name: "John", cards: "6h 7h 8h 9h 10h Kh")
def mike = new Person (name: "Mike", cards: "6s 7s 8s 9s 10s Ah")

TestBuilder.runTest (players: [john, mike], table:[:], deck:[]){
John_Attacks ('6h')
Mike_Defends ('6h': 'Ah')
John_Has ("7h 8h 9h 10h Kh")
}



Теперь количество строк кода в каждом тесте сократилось в 4-5 раз, тесты стали куда читаемее.
Простой Java программист успокоился, теперь он пишет тесты с радостью, улыбается, смотрит в окно и благодарит ГрувиМэна.
Рекомендуем
Популярное
наверх