2017-10-09 1 views
0

J'ai une application qui s'exécute sur le terminal.Scala - ScalaTest: simulation de l'entrée pendant le test

Cette application utilise uniquement Scala et SBT et je suis en train de le tester en utilisant ScalaTest. Je veux tester tous les composants comme un test d'intégration, en exécutant l'application, mais, pour cela, je veux simuler l'utilisateur envoyant des valeurs via une entrée standard en utilisant quelque chose comme un robot. Le plus important de tous, quand j'appelle readLine ou readInt, je veux envoyer différentes valeurs pendant le test.

Merci d'avance!


Modifier 1

Donc, j'ai ce code. Il imprime essentiellement les options pour l'utilisateur. Je veux, par exemple, envoyer 1, puis 3,4, pour créer une nouvelle cellule et vérifier mon CellArray pour vérifier si une nouvelle cellule a vraiment été créée dans cette position.

do { 
    println("Select one of the options: \n \n"); 
    println("[1] Make a cell alive"); 
    println("[2] Next generation"); 
    println("[3] Halt"); 

    print("\n \n Option: "); 

    option = parseOption(readLine) 

}while(option == 0) 

option match { 
    case MAKE_CELL_ALIVE => makeCellAlive 
    case NEXT_GENERATION => nextGeneration 
    case HALT => halt 
} 
+0

Fondamentalement, ce que vous voudrez faire est d'avoir une implémentation de test des bords de votre programme (readLine/readInt) qui fournissent des valeurs codées à la main ou générées (par exemple ScalaCheck). Déposez un peu de votre code ici et nous pouvons essayer de vous aider avec plus de détails. – Ren

Répondre

1

L'approche générale sera quelque chose le long de ces lignes.

// This is the class containing the logic you want to test 
class MyInputThing { 
    def readInput() = readLine 

    def thingIWantToTest = { 
    val input = readInput 
    doStuffWithInput(input) 
    } 
} 

// This test class returns a value representing something you want to verify. 
class TestMyInputThing extends MyInputThing { 
    override def readInput = "123" 
} 

Ensuite, dans votre test, utilisez TestMyInputThing.thingIWantToTest() et valider la réponse. Vous pouvez également extraire readInput dans un trait, paramétrer la création de TestMyInputThing, etc, afin de nettoyer cela. Je recommande également d'examiner ScalaCheck de sorte que vous n'avez pas besoin de manipuler des scénarios de test.