이전 / 이후와 함께 scalatest를 사용할 때 'null'을 피하는 방법은 무엇입니까?

프리 윈드

스파크 테스트에 대한기사 에서 몇 가지 샘플 코드가 있습니다.

class SparkExampleSpec extends FlatSpec with BeforeAndAfter {

  private val master = "local[2]"
  private val appName = "example-spark"

  private var sc: SparkContext = _

  before {
    val conf = new SparkConf()
      .setMaster(master)
      .setAppName(appName)

    sc = new SparkContext(conf)
  }

  after {
    if (sc != null) {
      sc.stop()
    }
  }
  (...)

작동하지만 nullable varaible이 sc있습니다. 여기서 합리적이지만 여전히 피하고 싶습니다.

나는 사용하려고했다 :

private var sc: Option[SparkContext] = None

  before {
    sc = Some(new SparkContext(conf))
  }

  after {
    sc.foreach(_.stop())
  }
  (...)

그런데 문제는 평범한 것만 큼 편리하지 않은 테스트에서와 sc같이 사용해야 Option[SparkContext]한다는 것입니다.SparkContext

테스트를 계속할 수있는 방법이 있지만 사용할 수 val sc: SparkContext있습니까?

(specs2에서 가능하다는 것을 알고 있지만 scalatest에서 수행하는 방법을 모르겠으며 지금 scalatest를 사용해야합니다)

남자 이름

을 사용하여 삭제 before하고 lazy val대신 a 사용할 수 있으므로 첫 번째 테스트에서 컨텍스트를 호출 할 때 컨텍스트가 초기화됩니다.

class SparkExampleSpec extends FlatSpec with BeforeAndAfter {

  private val master = "local[2]"
  private val appName = "example-spark"

  private lazy val conf = new SparkConf()
    .setMaster(master)
    .setAppName(appName)
  private lazy val sc = new SparkContext(conf)

  after {
    sc.stop()
  }

최신 정보:

그래서 이전에 비슷한 것을 겪었고 우리는 아래와 같은 특성 패턴으로 끝났습니다.

trait SparkAddOn {

  val conf:SparkConf

  def withSpark(f: SparkContext => Unit) ={
    val sc: SparkContext = new SparkContext(conf)
    try{
      f(sc)
    } finally {
      sc.stop()
    }
  }
}

따라서 테스트에서 'withSpark'를 사용합니다.

class SparkExampleSpec extends FlatSpec with SparkAddOn {

  private val master = "local[2]"
  private val appName = "example-spark"

  val conf = new SparkConf()
    .setMaster(master)
    .setAppName(appName)

  "test" should "do something" in withSpark { sc =>

  }
}

그리고 저는 Scalatest보다 Specs2를 훨씬 선호한다고 결론을 내릴 것입니다. 디자인은 크게 다르며 더 좋게는 전환 할 수 없습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Angular CDK DnD와 함께 맵을 사용할 때 뷰를 업데이트하는 방법은 무엇입니까?

pgfplots와 함께 include_tikz를 사용할 때 "! LaTeX 오류: 환경 축이 정의되지 않음"을 피하는 방법은 무엇입니까?

파이썬에서 np.where 함수를 사용할 때 NaN을 피하는 방법은 무엇입니까?

파이썬 사전을 사용할 때 keyError를 피하는 가장 좋은 방법은 무엇입니까?

Vim이 Ctrl + v와 함께 사용할 때 Ctrl을 먹어 치우는 이유와이를 해결하는 방법은 무엇입니까?

텍스트와 함께 glyphicon을 사용할 때 추가 공간을 피하는 방법은 무엇입니까?

R-FOR LOOP와 함께 ASSIGN을 사용할 때 NA를 제거하는 방법은 무엇입니까?

grunt와 함께 dalekjs를 사용할 때보고 옵션을 구성하는 방법은 무엇입니까?

ffmpeg와 함께 sox를 사용할 때 샘플 형식을 설정하는 방법은 무엇입니까?

flexbox와 함께 vh를 사용할 때 Component-Streching을 수정하는 방법은 무엇입니까?

CSS와 함께 플렉스 레이아웃을 사용할 때 스크롤바 문제를 해결하는 방법은 무엇입니까?

docker-compose와 함께 php:7.2-apache 이미지를 사용할 때 PHP 확장을 활성화하는 방법은 무엇입니까?

Ansible-with_items와 함께 set_fact 모듈을 사용할 때 사전에 새 키를 계속 추가하는 방법은 무엇입니까?

webpack을 사용할 때이 하드 코딩 된 index.js를 피하는 방법은 무엇입니까?

Reflection을 사용할 때 myFieldInfo.GetValue (null)를 이해하는 방법은 무엇입니까?

LIMIT와 함께 복잡한 SQL을 사용할 때 mysql SQL 속도를 높이는 방법은 무엇입니까?

페이징 mvc를 사용할 때 순환 리디렉션을 피하는 방법은 무엇입니까?

fetch api, express 및 node.js와 함께 event.preventDefault ()를 사용할 때 req.body가 null을 반환하는 이유는 무엇입니까?

Java Collection에서 get ()을 사용할 때 많은 null 검사를 피하는 방법은 무엇입니까?

watson-developer-cloud 패키지와 함께 Watson Q & A 서비스를 사용할 때 전체 답변을 얻는 방법은 무엇입니까?

CSS와 함께 div를 사용하여 테이블의 colspan을 모방하는 방법은 무엇입니까?

사전이 비어있을 때 오류를 피하는 방법은 무엇입니까?

NULL을 반환 할 수있는 함수와 함께 unique_ptr을 안전하게 사용하는 방법은 무엇입니까?

여러 테이블의 필드가 필요할 때 Hibernate와 함께 JPA에서 조인 '폭발'을 피하는 방법은 무엇입니까?

페이지 매김과 함께 Eloquent를 사용할 때 Laravel에서 데이터 배열을 뒤집는 방법은 무엇입니까?

TryGetValue를 사용할 때 사전 값을 업데이트하는 올바른 방법은 무엇입니까?

Typescript와 함께 Vue.js를 사용할 때 vue-resource와 같은 플러그인을 사용하는 방법은 무엇입니까?

스프라이트와 함께 이미지 사전을 사용하는 방법은 무엇입니까?

NavigationLink와 함께 사용할 때 NavigationView에서 보기를 재사용하는 방법은 무엇입니까?

TOP 리스트

  1. 1

    Ionic 2 로더가 적시에 표시되지 않음

  2. 2

    JSoup javax.net.ssl.SSLHandshakeException : <url>과 일치하는 주체 대체 DNS 이름이 없습니다.

  3. 3

    std :: regex의 일관성없는 동작

  4. 4

    Xcode10 유효성 검사 : 이미지에 투명성이 없지만 여전히 수락되지 않습니까?

  5. 5

    java.lang.UnsatisfiedLinkError : 지정된 모듈을 찾을 수 없습니다

  6. 6

    rclone으로 원격 디렉토리의 모든 파일을 삭제하는 방법은 무엇입니까?

  7. 7

    상황에 맞는 메뉴 색상

  8. 8

    SMTPException : 전송 연결에서 데이터를 읽을 수 없음 : net_io_connectionclosed

  9. 9

    정점 셰이더에서 카메라에서 개체까지의 XY 거리

  10. 10

    Windows cmd를 통해 Anaconda 환경에서 Python 스크립트 실행

  11. 11

    다음 컨트롤이 추가되었지만 사용할 수 없습니다.

  12. 12

    C #에서 'System.DBNull'형식의 개체를 'System.String'형식으로 캐스팅 할 수 없습니다.

  13. 13

    JNDI를 사용하여 Spring Boot에서 다중 데이터 소스 구성

  14. 14

    Cassandra에서 버전이 지정된 계층의 효율적인 모델링

  15. 15

    복사 / 붙여 넣기 비활성화

  16. 16

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

  17. 17

    Google Play Console에서 '예기치 않은 오류가 발생했습니다. 나중에 다시 시도해주세요. (7100000)'오류를 수정하는 방법은 무엇입니까?

  18. 18

    SQL Server-현명한 데이터 문제 받기

  19. 19

    Seaborn에서 축 제목 숨기기

  20. 20

    ArrayBufferLike의 typescript 정의의 깊은 의미

  21. 21

    Kubernetes Horizontal Pod Autoscaler (HPA) 테스트

뜨겁다태그

보관