import models.Algo; import org.junit.jupiter.api.Test; import java.util.AbstractMap; import static org.junit.jupiter.api.Assertions.*; class AlgoTest { @Test void ゲーム開始時0から11のカードで構成されたデッキとそこから2枚引いて構成された各プレイヤーの手札が存在する() { Algo algo = new Algo(); printState(algo); assertEquals(2, algo.getHandsA().size()); assertEquals(2, algo.getHandsB().size()); } @Test void Aはデッキから引いたカードでのアタックが成功しBのカードが1枚表になる() { //初期化 Algo algo = new Algo(); var iniHandsANum = algo.getHandsA().size(); var initDeckNum=algo.getDeck().size(); //正解のカードを選択させるための変数 var guess = algo.getHandsB().get(0).getKey(); var target = 0; //テスト対象メソッド algo.drawA(guess, target); printState(algo); //Aはデッキから引いているので,実行前と比べて枚数が1枚増えているか assertEquals(iniHandsANum+1,algo.getHandsA().size()); //Aによってアタックを成功されたBのカードが表になっているか assertEquals(true, algo.getHandsB().get(0).getValue()); //Aがデッキから引いているので,デッキの枚数が1枚減っているか assertEquals(initDeckNum-1,algo.getDeck().size()); } @Test void Aはデッキから引いたカードでのアタックが失敗しAのデッキに表のカードが追加される() { //初期化 Algo algo = new Algo(); var iniHandsANum = algo.getHandsA().size(); var initDeckNum=algo.getDeck().size(); //正解でないカードを選択させるための変数 var guess = algo.getHandsB().get(0).getKey()+1; var target = 0; var top = algo.getDeck().get(0); //テスト対象メソッド algo.drawA(guess, target); printState(algo); //Aはデッキから引いているので,実行前と比べて枚数が1枚増えている assertEquals(iniHandsANum+1,algo.getHandsA().size()); //アタックの失敗でBのカードが表になっていない assertEquals(false, algo.getHandsB().get(0).getValue()); //アタックが失敗したので,使用したカードが表になっている assertTrue(algo.getHandsA().contains(new AbstractMap.SimpleEntry<>(top.getKey(),true))); //Aがデッキから引いているので,デッキの枚数が1枚減っている assertEquals(initDeckNum-1,algo.getDeck().size()); } @Test void Bはデッキから引いたカードでのアタックが成功しAのカードが1枚表になる() { //初期化 Algo algo = new Algo(); var iniHandsBNum = algo.getHandsB().size(); var initDeckNum=algo.getDeck().size(); //正解のカードを選択させるための変数 var guess = algo.getHandsA().get(0).getKey(); var target = 0; //テスト対象メソッド algo.drawB(guess, target); printState(algo); //Aはデッキから引いているので,実行前と比べて枚数が1枚増えているか assertEquals(iniHandsBNum+1,algo.getHandsB().size()); //Aによってアタックを成功されたBのカードが表になっているか assertEquals(true, algo.getHandsA().get(0).getValue()); //Aがデッキから引いているので,デッキの枚数が1枚減っているか assertEquals(initDeckNum-1,algo.getDeck().size()); } @Test void Aは手札から選んだカードでのアタックが成功しBのカードが1枚表になる() { //初期化 Algo algo = new Algo(); //正解のカードを選択させるための変数 var guess = algo.getHandsB().get(0).getKey(); var target = 0; var attacker = 0; //テスト対象メソッド algo.selectA(guess, attacker, target); printState(algo); //Aによってアタックを成功されたBのカードが表になっているか assertEquals(true, algo.getHandsB().get(target).getValue()); //Aのアタックを成功しているので,使用したカードが表になっていないか assertEquals(false, algo.getHandsA().get(attacker).getValue()); } @Test void Aは手札から選んだカードでのアタックが失敗し選んだカードが表になる() { //初期化 Algo algo = new Algo(); //間違いのカードを選択させるための変数 var target = 0; var attacker = 0; var guess = algo.getHandsB().get(target).getKey()+1; //テスト対象メソッド algo.selectA(guess, attacker, target); printState(algo); //Aによってアタックを成功されたBのカードが表になっていないか assertEquals(false, algo.getHandsB().get(target).getValue()); //Aのアタックが失敗しているので,使用したカードが表になっているか assertEquals(true, algo.getHandsA().get(attacker).getValue()); } void printState(Algo algo){ String s=""; s+="deck:\n"; for(var i : algo.getDeck()){ s+="\t"+i.getKey()+"\t"+(i.getValue()?"open":"closed")+"\n"; } s+="handsA:\n"; for(var i : algo.getHandsA()){ s+="\t"+i.getKey()+"\t"+(i.getValue()?"open":"closed")+"\n"; } s+="handsB:\n"; for(var i : algo.getHandsB()){ s+="\t"+i.getKey()+"\t"+(i.getValue()?"open":"closed")+"\n"; } System.out.println(s); } }