저는 스칼라를 처음 접했고 (자바로부터) TDD/BDD를 개발하고 싶습니다. 그래서 스칼라에 대해 많이 알기 전에 이미 스칼라 테스트로 뛰어 들었습니다.스칼라 - 유닛 테스트 설정 (액세스 한정자 한정자 사용)
가능한 한 테스트하려는 관점에서 단위 테스트를위한 좋은 액세스 전략이라고 생각하는 것이 궁금합니다.
내가 테스트하고 싶은 클래스 월드가 있고 세계에 대한 모든 것을 알아야하는 클래스 에이전트가 있다고 가정합니다.
package program {
package world {
class World {
private var notForAgent
def forAgentDuringActing
// forAgentDuringActing has an important side effect in notForAgent
}
}
package agent {
class Agent
// would call World.forAgentDuringActing
}
package world.test {
class WorldSpec extends FunSpec {
describe("The world") {
it("should have side-effect behaviour when the agent acts on it") {
// ... the test ...
}
}
}
}
}
이 패키지 선언은 나에게 신성하지 않습니다. 제가 정말로 원했던 것은 WorldSpec이 World의 동반 대상과 같아서 부작용을 테스트 할 수 있다는 것입니다.
아마도 수정 자 한정자가 도움이 될 것으로 생각했습니다. 내가 private[world] notForAgent
라고 말할 수는 있지만, 실제로는 내가 원하는 것보다 더 많은 접근이 있습니다. 내가 실제로 원하는 것은 private[this, test.WorldSpec] notForAgent
과 같지만 여러 한정자가 허용되지 않는다고 생각합니다.
이 항목을 테스트 할 수 있도록하려면 어떻게해야합니까? 또는 내 생각이 잘못된 방향으로가는 곳을 나타낼 수 있습니까?
p.s. 나는 "진술하지 않는다"라는 진술을 안다. 하지만 "테스트가 코드 자체보다 중요합니다. 액세스 수정자를 테스트해야하는 경우 변경하십시오"라는 의견도 있습니다. 그러나이 스레드에서는이 토론을 피하고 싶습니다.
예, 알고 있습니다. 그러나 테스트하고 싶은 상태는 메소드가 아니라 var에 있습니다. 스칼라는 프라이빗 val에 대한 getter 메소드를 만들기 때문에 실제로는 사용할 수있다. 이렇게하면이 방법으로 테스트를 수행 할 수 있습니다. 그러나 더 자연스러운 방법으로 허용 할 방법이 없습니까 (예 : 동반자 개체의 경우)? – qkrijger
흠, 나는 아직 15 평판이 없기 때문에 답변을 투표 할 수 없습니다. ... : ( – qkrijger
나는이 방식으로 몇 가지 테스트를 구현 했으므로 공기가 약간 코드 - 냄새가 날 것이라고 말해야합니다. 이 테스트는 리팩터링 후에 나옵니다. (큰 문제는 아니지만 깨끗하지도 않습니다.) 누군가가 설정을 개선하는 방법에 대한 아이디어를 가지고 있습니다. 좋을 것 같습니다. 동반자와 같은 단위 테스트 객체,하지만 그 (가능한 경우) 같은 것을 달성하는 방법을 모르겠다. – qkrijger