2017-10-09 5 views
0

터미널 상단에서 실행되는 응용 프로그램이 있습니다.스칼라 - ScalaTest : 테스트 중에 입력 시뮬레이션

이 응용 프로그램은 스칼라와 SBT 만 사용하며 ScalaTest를 사용하여 테스트하고 있습니다.

앱을 실행하는 통합 테스트와 같은 모든 구성 요소를 테스트하고 싶지만, 그 대신 사용자가 로봇과 같은 것을 사용하여 표준 입력을 통해 값을 보내는 것을 시뮬레이트하고 싶습니다. 가장 중요한 것은 readLine 또는 readInt으로 전화 할 때 테스트하는 동안 differents 값을 보내려고합니다.

미리 감사드립니다.


편집 한

그래서,이 코드를했습니다. 기본적으로 사용자의 옵션을 인쇄합니다. 예를 들어, 13,4을 보내고 새 셀을 만들고 내 셀 어레이가 새 셀이 실제로 그 위치에 생성되었는지 확인하십시오.

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를 살펴보고 테스트 시나리오를 수작업으로 처리 할 필요가 없도록 권장합니다.