2015-01-16 2 views
3

나는 스칼라에 다음과 같은 패턴을 가지고이 패턴을 대체 기능으로 대체하는 방법은 무엇입니까?

object CurrentDriver { 

    private var webDriver: WebDriver = null 

    def invalidate = { 
    webDriver.quit() 
    webDriver = null 
    } 

    def getWebDriver = { 
    if (webDriver==null) 
     webDriver = DriverFactory.buildWebDriver 
    webDriver 
    } 
} 

그 작동하지, 그것은 VAR을 가지고 있으며, 무효화 방법은 단위를 반환합니다. 싱글 톤 객체는 프레임 워크에 의한 리플렉션을 사용하여 인스턴스화 된 몇 개의 클래스에 의해 참조되기 때문에 필요합니다. 따라서 인수를 전달할 방법이 없습니다. 따라서 WebDriver의 동일한 인스턴스에 액세스하려면 getWebDriver를 호출해야합니다. 필자는 주기적으로 (여러 테스트 함수로 구성된 각 테스트 시나리오가 끝난 후) invalidate 메서드로 처리되는 새 WebDriver를 끝내고 다시 작성해야합니다.

답변

4

나는 around 블록과 같은 것을 제안합니다.

각 테스트 블록에 대해 블록을 around 기능과 결합 할 수 있습니다.

def testFunc(webDriver: WebDriver) = around{ 
    assert(2 ==2) 
    // do something with webDriver 
} 
+0

이 좋은 답변입니다,하지만 난 여러 테스트에 사용되는 동일한 인스턴스를 필요로하는 내 특정 문제가 해결되지 않는, 그것의 내 잘못은 내가 질문을 작동하지 않았다 같이 예를 들어

올바르게 설명을 업데이트했습니다. 감사! – nfvindaloo

+0

나는 테스트의 서명이 같을 것이라고 추측하고있다. 각 테스트는 아무것도 가져 가지 않고 단위를 반환하지 않을 것이다.이 경우 블록 주위의 서명은 하나의 함수가 아닌 함수의 목록 일 수있다 .. 그리고 논리는 여전히 남아있을 것이다. 같은 ... 어떤 경우에, 테스트 용 vars 두 개가 그렇게 나쁘지는 않다. :) – mohit

+0

'webDriver' 인스턴스가'f' 함수에 전달되어야한다고 생각하기 때문에'around' 블록의 코드 그것에 접근 할 수 있습니다. –

관련 문제