2017-10-19 31 views
-1

J'essaie de faire quelques tests Junit pour un tableau tac tic toe. Je sais comment tester une fonction à la fois, mais mon problème est que pour vérifier certaines fonctions, les fonctions précédentes doivent être appelées.JUnit Test de plusieurs fonctions à la fois

Par exemple, afin de vérifier un gagnant, vous devez appeler la fonction fonction « marqueur de position » à plusieurs reprises. Celui sur lequel je suis est en train de vérifier que la fonction booléenne "CheckSpace" retourne false quand il y a déjà un marqueur dans le spot. J'ai actuellement

public class TestGame { 

private GameBoard board; 

@Before 
public void setUp() {board = new GameBoard();} 

@After 
public void tearDown() {board = null;} 

@Test 
public void testRewritingOverSpace() { 
    assertEquals("Placing (1, 1), then checking space (1, 1)", false, 
    board.placeMarker(new BoardPosition(1, 1, 'X')), 
    board.checkSpace(new BoardPosition(1, 1, 'O')); 

Ceci me donne une erreur. Donc, en bref, comment faites-vous un cas de test JUnit dans lequel vous devez appeler plusieurs fonctions.

+1

"Cela me donne une erreur." Sans savoir quelle est l'erreur, il est très difficile de vous aider. L'affirmation que vous comptez faire ici n'est pas claire, pour être honnête. Peut-être que vous voulez appeler 'board.placeMarker (...)' et ensuite 'assertEquals (false, board.checkSpace (...))'? Est-ce la méthode 'checkSpace' que vous testez en termes de retour faux? –

+1

Veuillez fournir plus de détails concernant l'erreur que vous voyez ainsi que la version de JUnit que vous utilisez. –

+0

Les questions qui cherchent une aide au débogage ("pourquoi ce code ne fonctionne-t-il pas?") Doivent inclure le comportement souhaité, un problème ou une erreur spécifique et le code le plus court nécessaire pour le reproduire dans la question elle-même. Les questions sans énoncé de problème clair ne sont pas utiles aux autres lecteurs. Voir: Comment créer un [mcve]. Utilisez le lien "modifier" pour améliorer votre * question * - ne pas ajouter plus d'informations via des commentaires. Merci! – GhostCat

Répondre

1

Pour répondre à la question: vous allez pas à pas. Surtout quand on considère TDD, vous travaillez comme ceci:

  • vous créez un premier test pour la première « caractéristique » de votre code de production
  • vous implémentez cette fonction
  • vous écrivez un autre test ... et mettre en œuvre

et oui, cela pourrait signifier que votre code ressemble à:

@Test 
public void testFirstFeature() { 
    ... one line of setup 
    ... invoke method on object under test 
    ... assert something 
} ... 

@Test 
public void testMoreAdvancedFeature() { 
    ... multiple 
    ... lines 
    ...  of setup 

    ... invoke method on object under test 
    ... assert something 
} 

et yo u probablement que vos cas de tests ultérieurs font réellement essai/vérifier le comportement qui est déjà couvert par des tests que vous avez écrit plus tôt. Ensuite, vous pouvez revenir en arrière et vous demander: «Y a-t-il un certain mérite dans gardant ces premiers tests - ou puis-je les jeter en toute sécurité?

Vous avez raison, l'équilibre est nécessaire ici: avoir plusieurs tests qui font les mêmes choses/similaires conduit à « double emploi ». D'un autre côté, plus vous aurez de tests, plus il vous sera facile de changer de petites choses ici et là, et ensuite de recevoir des commentaires immédiats.

Ainsi: il n'y a pas de réponse unique à cela. Tout est question de contexte et de jugement d'ingénierie.