- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一些 API 的实现。
例如:
public class SoPostApi implements SoApi {
...
@Override
public void searchOrganizations(String query, ...) {
String jsonResponse = performPostMethod("SearchOrg", ...);
...
}
@Override
public void searchCategories(String query, ...) {
String jsonResponse = performPostMethod("SearchCat", ...);
...
}
private String performPostMethod(String methodName, ...) {
URL url = new URL(API_URL + methodName);
...
}
我想使用 PowerMockito 来测试它。
我的看法:
URL.class
的新实例并返回 mocked URL
URL.class
参数的新实例是否包含子字符串(methodName.contains("SearchOrg")
,但如何?)methodName
模拟 openConnection()
方法例如:
如果方法 performPostMethod 使用包含 "SearchOrg"
的 String
参数实例化一个新的 URL.class
那么我想将其替换为URL
其中方法 openConnection()
返回为此参数配置的 HttpURLConnection
(getInputStream()
必须返回带有列表的 json组织)。
如果方法 performPostMethod 使用包含 "SearchCat"
的 String
参数实例化一个新的 URL.class
那么我想将其替换为URL
其中方法 openConnection()
返回为此参数配置的 HttpURLConnection
(getInputStream()
必须返回带有列表的 json类别)。
是否可以实现?
最佳答案
我认为您可以结合 whenNew(...)
和 thenAnswer() 来做到这一点Mockito 功能。
类似于下面的例子:
final InputStream inputStreamOrg = null; // Load your Org json input stream
final URL urlSearchOrg = PowerMockito.mock(URL.class);
Mockito.when(urlSearchOrg.openStream()).thenReturn(inputStreamOrg);
final InputStream inputStreamCat = null; // Load your Cat json input stream
final URL urlSearchCat = PowerMockito.mock(URL.class);
Mockito.when(urlSearchCat.openStream()).thenReturn(inputStreamCat);
PowerMockito.whenNew(URL.class).withArguments(Mockito.any(String.class))
.thenAnswer(new Answer<Object>() {
@Override
public URL answer(InvocationOnMock invocation) throws Throwable {
String spec = (String) invocation.getArguments()[0];
if (spec.contains("SearchOrg")) {
return urlSearchOrg;
} else if (spec.contains("SearchCat")) {
return urlSearchCat;
} else {
// OTher casees
return null;
}
}
});
注意:请注意,在您的 OP 中,您想模拟 openConnection()
方法以返回 InputStream
。我认为这是一个混淆,因为 openConnection
不返回 InputStream
。我想你指的是方法 openStream()
(我的例子是模拟这个方法)。无论如何,我认为通过这个示例,您可以了解如何以一般方式执行此操作。
希望对你有帮助
关于java - PowerMockito 可以使用 whenNew 检查参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35213165/
我只想模拟类中的一个静态方法,所有其他方法都应该像真实对象一样工作。 代码: public class ArrTest { public static int myMethod (int ar
我在使用 PowerMockito 模拟 whenNew(File.class) 时遇到问题。这是我要测试的方法: public void foo() { File tmpFile = new
我正在尝试模拟静态方法 Thread.sleep(1);在调用时返回 InterruptedException。我发现了一个似乎解决了我的问题的 SO 问题,但是在将我的代码设置为与该问题的答案相同后
我似乎无法克服这个问题。我正在尝试模拟一个带有 1 个参数的重载方法 class ClassWithOverloadedMethod { private boolean isValid(Cla
考虑以下(简化的)枚举: MyEnum { ONE public int myMethod() { // Some complex stuff return 1
当我尝试使用字符串输入模拟静态方法时,当我给出特定字符串时,模拟 stub 就会被执行,但是当我使用anyString()时,它不会按预期工作。 public class Foo { publ
我在一些单元测试中使用 PowerMockito,但遇到了问题。我正在尝试测试一种创建一系列线程并运行它们的方法。在每个线程内,创建一个我需要期望的对象,并返回我自己的模拟对象(它发出 http 请求
我有以下类,在构造函数中,我调用另一个构造函数来构建该类的字段: public class ClassIWantToTest { private ClassIWantToMock anothe
您好,我有这个 PowerMockito 测试,它会抛出 UnfinishedStubbingException @RunWith(PowerMockRunner.class) @PrepareFor
我有一些静态方法可以使用 Mockito + PowerMock 进行模拟。一切都是正确的,直到我尝试模拟一个只抛出异常的静态方法(并且什么都不做)。 我的测试类是这样的: 顶部: @RunWith(
测试片段: void somefunction() { try { aMock.doSomething(); bMock.another(); } finally {
我正在尝试使用 PowerMockito 捕获输入中传递给模拟对象的参数,这是代码: //I create a mock object ClassMocked mock = PowerMockito.
要测试的类 public class Randomer { public int get() { return (int) Math.random() + 1; } }
我正在编写 JUnit 测试以验证静态方法 (MyClass.myMethod()) 从未在方法流中被调用。我试着做这样的事情: PowerMockito.verifyStatic(Mockito
我想检查是否使用一组特定的参数调用了特定的构造函数,并检查参数是否正确。 该类使用 java (...) 的任意参数,如下所示: public class MyClass{ public My
我正在测试一个运行直到AtomicBoolean值发生变化的任务类。我使用 PowerMockito 是因为 AtomicBoolean 实例的 get() 方法是 final方法。 MyTaskTe
我有以下 jar : javax.servlet-api-3.1.9.jar junit-4.10.jar mockito-all-1.10.19.jar mockito-core-1.10.19.j
在单元测试中,如何忽略对方法的调用,如下所示? void methodToBeTested(){ // do some stuff methodToBeSkipped(parame
我正在尝试测试一些严重依赖静态方法调用的遗留代码。 基本上,我有一个类 A,它有方法 b() 和 c()。 A.b() 返回 void,A.c() 返回一个值。 如果真正的 A.b() 被调用,被测类
我正在使用 PowerMockito 测试静态方法,但不幸的是得到了ClassCastException。注意完全确定我是否没有遵循语法规则。 待测试代码: List proxyPrefs = (Li
我是一名优秀的程序员,十分优秀!