gpt4 book ai didi

java - 如何将代码从Jmockit 1.1更新到1.9以访问真实实例?

转载 作者:太空宇宙 更新时间:2023-11-04 06:42:41 26 4
gpt4 key购买 nike

我正在尝试将代码从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;
}
}

最佳答案

已解决。谢谢RogérioSean !

请注意,API 文档指出调用参数必须是模拟方法中的第一个参数。 –Rogério

关于java - 如何将代码从Jmockit 1.1更新到1.9以访问真实实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24463342/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com