저는 현재 JMockit과 조롱하고있는 정적 메서드를 가진 클래스가 있습니다. 다음과 같이 말하십시오.JUnit 테스트에서 JMockit을 사용하여 정적 메서드를 여러 번 모의합니다.
public class Foo {
public static FooValue getValue(Object something) {
...
}
public static enum FooValue { X, Y, Z, ...; }
}
나는 Foo의 정적 메소드를 호출하는 또 다른 클래스 (MyClass라고 부름)가 있습니다. 이 클래스의 테스트 케이스를 작성하려고합니다. JMockit를 사용하여 내 JUnit 테스트는이 같은 같습니다이 벌금과 멋쟁이 작동
public class MyClassTest extends TestCase {
@NonStrict private final Foo mock = null;
@Test public void testMyClass() {
new Expectations() {
{
Foo.getValue((Object) any); result = Foo.FooValue.X;
}
};
}
myClass.doSomething();
}
을하고, 테스트가 실행될 때 호출 할 때 MyClass에 내 인스턴스가 제대로 Foo.FooValue.X의 열거 값을 얻을 것이다 Foo.getValue().
이제 모두를 값으로 반복하고 테스트를 반복 실행하려고합니다. 위의 테스트 코드를 for 루프에 넣고 조롱 된 정적 메서드의 결과를 각 열거 형 값으로 설정하려고하면 작동하지 않습니다. Foo.getValue()의 조롱 된 버전은 항상 Foo.FooValue.X를 반환하며 열거를 반복 할 때 다른 값은 반환하지 않습니다.
단일 JUnit 테스트에서 정적 메서드를 여러 번 조롱하는 방법은 무엇입니까? 나는 이와 같은 것을하고 싶다. (그러나 분명히 효과가 없다.)
public class MyClassTest extends TestCase {
@NonStrict private final Foo mock = null;
@Test public void testMyClass() {
for (final Foo.FooValue val : Foo.FooValue.values() {
new Expectations() {
{
// Here, I'm attempting to redefine the mocked method during each iteration
// of the loop. Apparently, that doesn't work.
Foo.getValue((Object) any); result = val;
}
};
myClass.doSomething();
}
}
}
어떤 아이디어라도? 대신 하나의 녹화에서 "방법을 여러 번 조롱"당신은 기록해야합니다 연속 된 여러 반환 값의
FooValue.X가 아닌 다른 값으로 첫 번째 경우에 올바르게 작동하는지 확인 하시겠습니까? –