2017-10-09 8 views
0

端末の上で実行されるアプリケーションがあります。Scala - ScalaTest:テスト中に入力をシミュレートする

このアプリケーションはScalaとSBTのみを使用しており、ScalaTestを使用してテストしています。

私はインテグレーションテストのようにすべてのコンポーネントをテストしたいと思っていますが、そのためには、ユーザーがロボットのようなものを使って標準入力から値を送信するのをシミュレートします。最も重要なのは、私がreadLineまたはreadIntと呼ぶとき、私はテスト中にdifferentsの値を送りたいと思います。

ありがとうございます!


編集1

だから、私はこのコードをしました。これは、基本的にユーザーのオプションを表示します。たとえば、13,4を送信して新しいCellを作成し、新しいセルが実際にその位置に作成されたかどうかを確認するためにCellArrayを確認したいとします。

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

基本的には、ハンドコーディングまたは生成された(ScalaCheckなどの)値を提供するプログラムのエッジ(readLine/readInt)のテスト実装が必要です。いくつかのコードをここにドロップすると、より詳細な情報を得ることができます。 – Ren

答えて

1

一般的なアプローチは、これらの行に沿ったものになります。

// 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" 
} 

次に、テストでは、TestMyInputThing.thingIWantToTest()を使用して応答を検証します。また、readInputを特性に引き出し、TestMyInputThingの作成をパラメータ化して、これをクリーンアップすることもできます。 ScalaCheckを調べることをお勧めしますので、テストシナリオを手作業で行う必要はありません。

関連する問題