Open hzdavid opened 6 years ago
请问怎么mock一个httpClient的返回值呢?本地一直提示,说HttpGet没有equals方法。
@kiddy2013
在junit/testng测试方法体中,
new MockUp<org.apache.http.client.methods.HttpGet>(){
@Mock
public String getMethod(){
//这里写,你想返回的内容
}
};
JNITools.loadNative() JNITools这个类是哪个jar中的。。
@hzdavid 非常感谢
Deencapsulation.invoke()
方法没了
那现在怎么调用private
方法呢
@hwhaocool 用反射。
`import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method;
public class InvokePrivate {
public static class HelloWorld {
private String sayHello() {
return "HelloWorld";
}
}
public static void main(String[] args)
throws IllegalAccessException, IllegalArgumentException, InvocationTargetException {
HelloWorld helloworld = new HelloWorld();
Method[] methods = HelloWorld.class.getDeclaredMethods();
for (int i = 0; i < methods.length; i++) {
Method m = methods[i];
if (m.getName().equals("sayHello")) {
m.setAccessible(true);
System.out.println(m.invoke(helloworld, null));
}
}
}
} `
如果要mock private方法体,要借助MockUp 见http://jmockit.cn/showArticle.htm?channel=3&id=2
请问怎么mock一个返回值非void的super调用呢? class Parent { public String methodA() { return "A"; } }
class Child extends Parent { public String methodB() { // 调用super方法 String a = super.methodA(); return "B" + a; } } 我想测试Child的methodB()方法.
@hbtj1216
`public class ChildTest extends Parent { @Test public void methodBtest() { Child c = new Child(); Assert.assertTrue(c.methodB().equals("BA")); }
/**
* 用MockUp & Mock,详情见 http://jmockit.cn/showArticle.htm?channel=3&id=2中的MockUp讲述
*/
@Test
public void methodBtest1() {
class ParentMockUp extends MockUp<Parent> {
@Mock
public String methodA() {
// 这里写MOCK逻辑,假设返回 "C"
return "C";
}
}
new ParentMockUp();
Child c = new Child();
Assert.assertTrue(c.methodB().equals("BC"));
}
/**
* Expectations,详情见
* http://jmockit.cn/showArticle.htm?channel=3&id=2中的Expectations讲述
*/
@Test
public void methodBtest2() {
final Parent instanceToRecord = new Parent();
new Expectations(Parent.class) {
{
instanceToRecord.methodA();
result = "C";
}
};
Child c = new Child();
Assert.assertTrue(c.methodB().equals("BC"));
}`
文章通俗易懂,很不错,支持
请问如何实现多次调用返回不同的值,比如obj1.get()第一次调用,mock返回1,第二次调用,mock返回2... 以此类推
请问如何实现多次调用返回不同的值,比如obj1.get()第一次调用,mock返回1,第二次调用,mock返回2... 以此类推
@dlt-1997
用jmockit实在太方便了,见 http://www.jmockit.cn/showArticle.htm?channel=4&id=26
源代码也已上传。
请问一下 我这边使用的时候遇到这个报错, 请问有解决办法吗? jmockit didn't get initialized; please check the -javaagent JVM initialization parameter was used
请问一下 我这边使用的时候遇到这个报错, 请问有解决办法吗? jmockit didn't get initialized; please check the -javaagent JVM initialization parameter was used
不要用jre,要用jdk.
参照 http://jmockit.cn/showArticle.htm?channel=3&id=2 的方法可以mock私有方法,但是我一个类A中方法1中多次调用私有方法2,每一次调用私有方法,我想返回不同的值应该怎么实现呢? `public class PrivateMethod {
public void method1() {
if(isEnable(1)) {
System.out.println("1");
} else {
System.out.println("2");
}
if(isEnable(2)) {
System.out.println("3");
} else {
System.out.println("4");
}
}
private boolean isEnable(int i) {//针对这个私有方法每次返回不同的值,mockup中好像每次都是相同结果
if(i == 0) {
return true;
} else {
return false;
}
}
} `
@superbaobei
java.lang.IllegalStateException: JMockit didn't get initialized; please check the -javaagent JVM initialization parameter was used.
需要配置启动参数?
测试类中有多个测试方法,每个方法都用了Expectations(.class)或者new MockUp()进行mock 测试类内部 执行单元测试没问题,通过maven test(maven-surefire-plugin)多线程执行会报错
想要在不同的testcase中mock相同的static method,需要返回不同的值,这个需要怎么实现呀,或者在每一个case执行完后如何进行恢复mock的动作,看很多都是使用Mockit。teardownMocks,但是版本jar中已经没有这个包了,求解答
在Base类中定义一个Mockup对象,并在 @BeforeClass 中进行 new,如下所示:
protected static DataMetaServiceMockup dataMetaServiceMockup;
@BeforeClass
public static void initSQL() throws Exception {
dataMetaServiceMockup = new DataMetaServiceMockup();
}
那么对于Base类的子类中的每个@Test,DataMetaServiceMockup是否会生效?
总之,对于 extends Mockup
如题。