Spock의 매력을 넓혀서이 문제에 착수하려고합니다. 실제로 Groovy 클래스에 대한 Unit Tests를 작성하려고 시도하지만 Java에 호출합니다. 정적 메서드는 개인 생성자를 호출합니다. 코드는 다음과 같습니다.Spock Mock에서 Java 생성자를 사용할 수 있습니다.
private MyConfigurator(String zkConnectionString){
solrZkClient = new SolrZkClient(zkConnectionString, 30000, 30000,
new OnReconnect() {
@Override
public void command() { . . . }
});
}
"SolrZkClient"는 타사 (Apache) Java 라이브러리에서 가져온 것입니다. ZooKeeper에 연결하려고하기 때문에 단위 테스트의 일부로 내부 테스트를 실행하는 대신이 Unit Test를 조롱하고 싶습니다.
내 시험은 어려움없이 생성자에 도달,하지만 난 그 ctor에 번번이 할 수
def 'my test'() {
when:
MyConfigurator.staticMethodName('hostName:2181')
then:
// assertions
}
이렇게 어쨌든이 있나요?
감사합니다 피터는 매우 '상식적인'조언처럼 보입니다. 이 답을 실제로 받아들이는 것을 지연시키는 것은 문제가되었습니다. 소량의 코드조차도 검사해야하는 이유가 있습니다. 이 클래스의 목적은 SolrCloud 구성의 기본 세부 사항을 숨기는 추상화입니다. 이러한 세부 사항을 '추상화'하려면 connectString 만 있으면됩니다. 따라서 클래스가 숨기려고하는 객체를 전달하는 것은 실제로 옵션이 아닙니다. 오늘이 시간을 더 보내고 다시 의견을 말하게 될 것입니다. – JoeG
왜 두 번째 생성자를 추가 할 수 없습니까? –
그것은 캡슐화를 깨뜨릴 것입니다. 클래스의 목적 중 하나는 호출 체인 위로 전달하지 않고 SolrZkClient의 생성을 숨기는 것입니다. – JoeG