>

다음과 같이 "테스트중인 모든 코드를 실행 한 후에 확인해야합니다"라는 오류가 표시됩니다.

class CowTest extends MockFactory {
  Cow.init(testCowProcesses)
  @Test
  def noProcessesTest: Unit = {
    val cow: Cow = Cow(testCowProcesses)
    cow.simulateOneDay(0 nanoseconds)
  }

  @Test
  def processSimulationTest: Unit = {
    val NUMBER_OF_TRIES: Int = 10
    val cow: Cow = Cow(testCowProcesses)
    for (ii <- 0 until NUMBER_OF_TRIES) {
      cow.simulateOneDay(0 nanoseconds)
    }
    (cow.metabolicProcess.simulateOneDay _).verify(0 nanoseconds).repeated(NUMBER_OF_TRIES)
  }
}

testCowProcesses  다음과 같이 다른 파일에 정의되어 있습니다 (약어) :

object CowTesters extends MockFactory {
  val metProc = stub[MetabolicProcess]
  (metProc.replicate _).when().returns(metProc)
  val testCowProcesses = CowProcesses(metProc)
}

오류 메시지를 잘 이해하지 못합니다. 내가 verify 를 언급하면  라인 테스트가 실행됩니다. 또는 첫 번째 테스트를 주석 처리하면 두 번째 테스트를 실행할 수 있습니다. 테스트 클래스에는 다른 테스트가 없습니다. 이것은 mockito에서 스터브 객체를 재사용 할 수 없음을 나타냅니다 (mockito의 코드를 조정하고 있습니다).

CowTesters 를 변환하여 모의 객체를 다시 인스턴스화하는 가장 좋은 솔루션입니다   class 로 ?

수정 :

위의 제안이 효과가 있음을 확인했지만 (최고인지 확실하지는 않지만) 그 동안 컴파일을 통해 좀 더 복잡하게 만들었습니다.

//TODO: once all tests are converted to ScalaMock, 
//TODO: just make this a class with a companion object
trait CowTesters extends MockFactory {
  val metProc = stub[MetabolicProcess]
  (metProc.replicate _).when().returns(metProc)
  val testCowProcesses = CowProcesses(metProc)
}
object CowTesters extends CowTesters {
  def apply(): CowTesters = new CowTesters {}
}


  • 답변 # 1

    위의 코드에서 JUnit 또는 TestNG를 사용하려고하는 것 같습니다. ScalaMock은 이러한 프레임 워크 중 하나를 직접 지원하지 않기 때문에 모의 검증에 어려움을 겪고 있습니다. ScalaTest 또는 Specs2를 사용하여 테스트를 구현해야합니다. http://scalamock.org/user-guide/integration/

    참조

    예를 들어, JUnit에서 ScalaTest 로의 변환은 매우 간단해야합니다. FunSuite : http://www.scalatest.org/user_guide/selecting_a_style

관련 자료

  • 이전 java - O (n) 시간에 20을 곱한 두 숫자 찾기
  • 다음 c++ - 모든 입력 후 어레이 이름 스토리지 프로그램 충돌