자동화를 위해 ScalaTest를 사용하고 있습니다. 일반적인 테스트 논리 구조는 테스트가 응용 프로그램 논리를 검사 한 다음 정리하는 것입니다. 그래서 그것을 테스트 본문 부분과 테스트 정리 부분이라고합시다. 테스트 본문이 실패하면 테스트 보고서에서보고 싶습니다. 테스트 본문이 실패하지 않지만 정리 부분이 실패하면 테스트 보고서에서 테스트가 오류로 끝났음을 확인하고 싶습니다. 그래서 다음과 같은 구조를 생각해 냈습니다 (예는 제가 제공 할 수있는 가장 간단한 것입니다).
"Admin" should "be able to create a new team" in{
val tempTeam = Team("Temp QA Team")
val attempt=Try{
When("Admin opens the Teams view")
TeamsPage.open
And("creates a new team")
TeamsPage.createNewTeam(tempTeam)
Then("this team is shown in the list")
TeamsPage.isParticularTeamShownInTeamList(tempTeam.name) shouldBe true
}
val cleanUp = Try(TeamsPage.cleanUpTeam(tempTeam))
attempt match{
case Failure(e) => throw e
case Success(r) =>{
if(cleanUp.isFailure) cleanUp.get
r
}
}
}
테스트 본문 부분이 성공할 때뿐만 아니라 항상 실행하려면 정리 부분이 필요합니다.
예상대로 작동하지만 두 가지 문제가 있습니다.
cleanUp.get
는 쓸모없는 표현 이라고 말합니다 . 그 부분을 더 정확한 방식으로 작성하는 방법은 무엇입니까? 나는 그것을으로 다시 쓸 수 있으며 if(cleanUp.isFailure) throw cleanUp.failed.get
, IDE는 불평하지 않을 것이지만 실제로는 동일한 진술을 작성하는 더 긴 방법입니다.올바르게 수행하려는 작업을 이해하면 대답은 다음 flatMap
과 map
같습니다.scala.util.Try
귀하의 경우 (코드를 그대로 사용)
"Admin" should "be able to create a new team" in{
val tempTeam = Team("Temp QA Team")
val attempt=Try{
When("Admin opens the Teams view")
TeamsPage.open
And("creates a new team")
TeamsPage.createNewTeam(tempTeam)
Then("this team is shown in the list")
TeamsPage.isParticularTeamShownInTeamList(tempTeam.name) shouldBe true
}
val cleanUp = Try(TeamsPage.cleanUpTeam(tempTeam))
attempt.flatMap(r => cleanup.map(c => r)).get
}
attempt
실패하지 않는 한의 결과를 반환합니다 .이 경우 attempt
의 예외가 발생합니다. cleanup
(귀하의 코드처럼) 의 성공적인 결과를 무시 하지만 cleanup
예외가 발생하면 해당 예외 가 발생합니다.
NB 나는 실제로 IDE에서 이것을 시도하지 않았으므로 이것이 get
쓸모없는 표현 이라고 말하는 IntelliJ에 대한 귀하의 질문 # 1을 해결할 수 있는지 말할 수 없습니다 .
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다