ScalaTest를 사용하여 스칼라로 작성한 파서를 테스트하고 있습니다. 파서는 한 번에 하나 개의 파일을 처리하고 그것은 다음과 같은 단일 개체가 있습니다ScalaTest : Singleton Object 재 초기화 문제
class Parser{...}
object Resolver {...}
내가 작성한 테스트 케이스는 이전의 부작용 반복 각 지금이
describe("Syntax:") {
val dir = new File("tests\\syntax");
val files = dir.listFiles.filter(
f => """.*\.chalice$""".r.findFirstIn(f.getName).isDefined);
for(inputFile <- files) {
val parser = new Parser();
val c = Resolver.getClass.getConstructor();
c.setAccessible(true);
c.newInstance();
val iserror = errortest(inputFile)
val result = invokeparser(parser,inputFile.getAbsolutePath) //local method
it(inputFile.getName + (if (iserror)" ERR" else " NOERR")){
if (!iserror) result should be (ResolverSuccess())
else if(result.isInstanceOf[ResolverError]) assert(true)
}
}
}
처럼 다소이다 싱글 톤 객체 Resolver 내부의 반복은 정리되지 않습니다.
싱글 톤 객체를 다시 초기화하기 위해 스 케일 테스트 모듈을 지정하는 방법이 있습니까?
업데이트 : 다니엘의 제안을 사용하여 코드를 업데이트했으며 자세한 내용도 추가했습니다.
업데이트 : 분명히 뭔가 비린내가있는 파서입니다. 후속 호출에서는 이전 AST를 삭제하지 않습니다. 이상한. 이것은 주제를 벗어난 것이기 때문에 더 많이 파고 토론을위한 별도의 스레드를 사용합니다. 답변을 주셔서 감사합니다.
최종 업데이트 :이 문제는 Resolver가 아닌 다른 싱글 톤 개체와 관련된 것이 었습니다 그래서 나는 그것을 어떻게 든 놓쳤다. Daniel Spiewak의 대답을 사용하여이 문제를 해결할 수있었습니다. 그것은 일을하는 더러운 방법이지만 그것도 내 상황을 감안할 때 유일한 것은, 또한 프로덕션 사용으로 가지 않을 테스트 코드를 작성하고 있다는 사실을 감안할 때.
'R'안에 정리 방법이 있습니까? 아니면 다시 만들어지기를 기대합니까? –
R에는 정리 방법이 없으므로 코드를 변경할 수 없습니다. 스칼라에서 싱글 톤 객체를 다시 만들 수 있습니까? – thequark
아니요. 그들은 엄격하게 싱글 톤입니다. 주문형 (JVM의 클래스 로딩에 의해 결정됨) 이후에는 영원한 것으로 초기화됩니다. 물론 스칼라 클래스와 마찬가지로 가변적 인 내부 상태를 가질 수 있습니다. –