Я пытаюсь обновить код из Jmockit
1,1 до 1,9 для доступа в реальном Instance, но это, кажется неудачным, как показано ниже:Как обновить код от Jmockit 1.1 до 1.9 для доступа к реальному экземпляру?
java.lang.IllegalArgumentException: Matching real methods not found for the following mocks:
CopyOfAccessRealInstanceTest$1#getRealInstanceName(String m, mockit.Invocation inv)
at CopyOfAccessRealInstanceTest$1.<init>(CopyOfAccessRealInstanceTest.java:28)
at CopyOfAccessRealInstanceTest.mockConstructor(CopyOfAccessRealInstanceTest.java:28)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Я думаю, что это связано с макетом способом:
@Mock(invocations = 1)
public String getRealInstanceName(String m,Invocation inv)
------------------------- Коды 1.9 ----------------------- ----------
public class CopyOfAccessRealInstanceTest {
private Constructor constructor = new Constructor("");
@Test
public void mockConstructor() {
// Mockit.setUpMock(Constructor.class, new MockedConstructor());
MockUp<Constructor> mockup = new MockUp<Constructor>() {
//public Constructor it;
@Mock(invocations = 1)
public String getRealInstanceName(String m,Invocation inv)
{
if ("real".equals(m)) {
return inv.proceed(inv.getInvokedArguments());
// return it.getRealInstanceName(m);
} else {
return "mock";
}
}
};
Assert.assertEquals("mock",
constructor.getRealInstanceName(""));
Assert.assertEquals("real_m_real",
constructor.getRealInstanceName("real"));
}
}
----------------------- Код Jmock 1.1 ------- ------------------------ -
public class AccessRealInstanceTest {
private Constructor constructor = new Constructor("");
@Test
public void mockConstructor() {
Mockit.setUpMock(Constructor.class, new MockedConstructor());
Assert.assertEquals("real_m_real",
constructor.getRealInstanceName("real"));
}
public static class MockedConstructor {
public Constructor it;
@Mock(reentrant = true)//reentrant allow to access real instance
public String getRealInstanceName(String m) {
if ("real".equals(m)) {
return it.getRealInstanceName(m);
} else {
return "mock";
}
}
}
}
Класс быть Передразнивало:
public class Constructor {
private String memberId;
public Constructor(String memberId) {
this.memberId = memberId;
}
public String getRealName() {
return "real_" + this.memberId;
}
public String getRealInstanceName(String m) {
return "real_m_" + m;
}
}
Что не удалось? В чем проблема, с которой вы сталкиваетесь? –
Я обновил описание в части исключения в верхней части. Благодарю. – Leo
Что такое код в строке ** ** в классе 'CopyOfAccessRealInstanceTest'? –