문제

때로는 클래스 방법을 테스트하고 싶고 슈퍼 클래스 방법의 호출에 대한 기대를하고 싶습니다. EasyMock 또는 Jmock을 사용하여 Java 에서이 기대를 수행 할 수있는 방법을 찾지 못했습니다 (그리고 불가능하다고 생각합니다).

슈퍼 클래스 메소드 논리로 대의원을 만들고 기대치를 설정하기위한 (상대적) 깨끗한 솔루션이 있지만 그 솔루션을 사용하는 이유와시기를 모르겠습니다. 아이디어/예?

감사

도움이 되었습니까?

해결책

글쎄, 당신이 원한다면 할 수 있습니다. 당신이 익숙한 지 모르겠습니다 jmockit, 가서 확인하십시오. 현재 버전은 그 동안 0.999.17입니다.

다음 클래스 계층 구조를 가정하십시오.

public class Bar {
    public void bar() {
        System.out.println("Bar#bar()");
    }
}

public class Foo extends Bar {
    public void bar() {
        super.bar();
        System.out.println("Foo#bar()");
    }
}

그런 다음, 당신의 jmockit을 사용하십시오 FooTest.java 실제로 전화를 걸고 있음을 확인할 수 있습니다. Bar ~에서 Foo.

@MockClass(realClass = Bar.class)
public static class MockBar {
    private boolean barCalled = false;

    @Mock
    public void bar() {
        this.barCalled = true;
        System.out.println("mocked bar");
    }
}

@Test
public void barShouldCallSuperBar() {
    MockBar mockBar = new MockBar();
    Mockit.setUpMock(Bar.class, mockBar);

    Foo foo = new Foo();
    foo.bar();

    Assert.assertTrue(mockBar.barCalled);

    Mockit.tearDownMocks();
}

다른 팁

@CEM Catikkas 답변에서 jmockit 1.22를 사용하여 확장 : :

@Test
public void barShouldCallSuperBar() {
    new MockUp<Bar>() {
        @Mock
        public void bar() {
            barCalled = true;
            System.out.println("mocked bar");
        }
    };

    Foo foo = new Foo();
    foo.bar();

    Assert.assertTrue(mockBar.barCalled);
}

@MockClass로 주석이 달린 정적 클래스가 필요하지 않으며 Mockup 클래스로 대체됩니다.

나는 내가 슈퍼 콜을 조롱한다고 생각하지 않습니다. 그것은 의존성의 행동보다는 클래스 자체의 행동의 일부가있는 행동처럼 느껴집니다. 조롱은 항상 다른 것보다 의존성과 관련이있는 것처럼 느껴집니다.

조롱하고 싶은 종류의 전화에 대한 좋은 예가 있습니까? 이런 전화를 조롱하고 싶다면 상속 대신 구성을 고려할 가치가 있습니까?

애니메이션 전환 샘플 테스트 스위트에서 JMockit 기대 API를 사용하여 (즉, 슈퍼 클래스 방법에 대한 예상 호출을 지정) 몇 가지 테스트가 있습니다. 예를 들어, FadeIntest 테스트 케이스.

아니요, 슈퍼 클래스 방법을 조롱하는 방법은 없습니다. jmock.

그러나 문제에 대한 빠른 해결책이 있습니다. 클래스 A와 클래스 B가 A를 확장한다고 가정 해보십시오. 상관 없다). 그 조롱 후 C를 사용하고 B를 사용하는 곳 어디에서나 모의를 사용하십시오.

슈퍼 콜을 가로 채는 것은 너무 세밀한 입자입니다. 격리를 과도하게 사용하지 마십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top