일부 Java 코드를 테스트하기 위해 Groovy로 작성된 Spock 테스트를 사용하고 있습니다. Spock은 Groovy 클래스를 조롱하기 때문에 JMockit을 사용하여 Java 코드에서 메소드를 조롱했습니다. JMockit MockUp
이 테스트 사이에 지속되는 문제가 있습니다. 이러한 mock 인스턴스는 테스트 (JMockit 문서 별)에 대해서만 존재해야하지만 작동하지 않습니다. JMockit 테스트 러너와 Spock 테스트 러너를 사용하지 않았기 때문에 상상할 수 있습니다.Spock 테스트 사이에 지속되는 JMockit MockUp
내가 직면 한 문제 중 가장 간단한 예는 다음과 같습니다. 문자열을 반환하는 간단한 메서드가 있는데 MockUp
메서드의 반환 값을 변경할 수는 있지만 사용하지 않을 세 번째 테스트에는 여전히 존재합니다. ClassToTest.method()
여전히 문자열 "조롱"가 아니라 "원래"반환하기 때문에
자바 클래스
public class ClassToTest {
public String method() {
return "original";
}
}
스팍 테스트
class ClassToTestSpec extends Specification {
void "first test"() {
when:
String result = new ClassToTest().method()
then:
result == "original"
}
void "second test"() {
setup:
new MockUp<ClassToTest>() {
@Mock
public String method() {
return "mocked"
}
}
when:
String result = new ClassToTest().method()
then:
result == "mocked"
}
void "third test"() {
when:
String result = new ClassToTest().method()
then:
result == "original"
}
}
세 번째 테스트는 실패합니다. 디버거를 사용하여 Mocked 메서드가 두 번 호출됨을 확인했습니다.
질문
수동 JMockit에서 클래스 MockUp
을 제거하는 방법이 있습니까? 감사.
Spock은 Java 및 Groovy 클래스를 모방 할 수 있습니다. 테스트중인 클래스를 조롱하는 것은 냄새이며주의해서 사용해야합니다. –
@PeterNiederwieser 응답 주셔서 감사합니다. 정상적인 표기법 인'instance.method() >> result'를 사용할 수 없습니다. 올바른 방향으로 나를 가리킬 수 있습니까? – mnd
표기법이 작동하지 않는 스크래치는'ClassToTest instance = Mock (ClassToTest)'와 같이 객체를'Mock '으로 인스턴스화하는 것을 잊었다. 이제 이것을 스파이와 함께 부분 모의로 만드는 방법을 찾아야합니다. – mnd