Mockito:如何使用when(instance.meth).然后不用mock回答



我尝试了以下代码:

package ro.ex;
/**
 * Created by roroco on 11/11/14.
 */
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
import static org.mockito.Mockito.*;

public class ExTest extends junit.framework.TestCase {
    class C {
        public String m() {
            return null;
        }
    }
    public void testM() throws Exception {
        when(new C().m()).thenAnswer(new Answer<String>() {
            @Override
            public String answer(InvocationOnMock invocation) throws Throwable {
                Object[] args = invocation.getArguments();
                return (String) args[0];
            }
        });
    }
}

我希望我能更改一个真实的实例,而不是mock,而是上面的代码提升:

when() requires an argument which has to be 'a method call on a mock'.

我的问题是:如何修复它。

我假设这是您创建的用于在此处提问的示例代码,但实际上,C应该是被测试的类(而不是测试中的类)。

Class MyClassToTest {
public String m() {...}
}

现在在测试中,模拟类C.@Mock C c,然后是when(c.m()).thenAnswer....。在测试方法中。

不确定为什么需要,但可以使用spy:

public void testM() throws Exception {
    C c = Mockito.spy(new C());
    // actual method
    c.m();
    // stubbed method
    when(c.m()).thenAnswer(...);
}

或者,您可以mock对象,并在需要时调用thenCallRealMethod()

相关内容

  • 没有找到相关文章

最新更新