gpt4 book ai didi

java - 如何抑制和验证私有(private)静态方法调用?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:49:09 25 4
gpt4 key购买 nike

我目前在 JUnit 测试中遇到困难,需要一些帮助。所以我用静态方法得到了这个类,它将重构一些对象。为了简单起见,我举了一个小例子。这是我的工厂类:

class Factory {

public static String factorObject() throws Exception {
String s = "Hello Mary Lou";
checkString(s);
return s;
}

private static void checkString(String s) throws Exception {
throw new Exception();
}
}

这是我的测试类:

@RunWith(PowerMockRunner.class)
@PrepareForTest({ Factory.class })
public class Tests extends TestCase {

public void testFactory() throws Exception {

mockStatic(Factory.class);
suppress(method(Factory.class, "checkString"));
String s = Factory.factorObject();
assertEquals("Hello Mary Lou", s);
}
}

基本上我试图实现的是私有(private)方法 checkString() 应该被抑制(因此不会抛出异常),并且还需要验证方法 checkString() 是否在方法 factorObject() 中实际被调用。

更新:抑制与以下代码一起正常工作:

suppress(method(Factory.class, "checkString", String.class));
String s = Factory.factorObject();

... 但是它为字符串“s”返回 NULL。这是为什么?

最佳答案

好的,我终于找到了所有问题的解决方案。如果有人在这里偶然发现类似的问题是代码:

import junit.framework.TestCase;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.times;
import static org.powermock.api.support.membermodification.MemberModifier.suppress;
import static org.powermock.api.support.membermodification.MemberMatcher.method;
import static org.powermock.api.mockito.PowerMockito.mockStatic;
import static org.powermock.api.mockito.PowerMockito.verifyPrivate;

@RunWith(PowerMockRunner.class)
@PrepareForTest(Factory.class)
public class Tests extends TestCase {

public void testFactory() throws Exception {

mockStatic(Factory.class, Mockito.CALLS_REAL_METHODS);
suppress(method(Factory.class, "checkString", String.class));
String s = Factory.factorObject();
verifyPrivate(Factory.class, times(1)).invoke("checkString", anyString());
assertEquals("Hello Mary Lou", s);
}
}

关于java - 如何抑制和验证私有(private)静态方法调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16458981/

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