我正在使用某个抛出异常的库,并希望测试在抛出异常时我的代码行为是否正确。将其中一个重载方法截尾似乎不起作用。我得到了这个错误:Stubber不能应用于void。不存在变量类型T的实例类型,因此void确认为T
`public class AnotherThing {
private final Something something;
public AnotherThing(Something something) {
this.something = something;
}
public void doSomething (String s) {
something.send(s);
}
}
public class Something {
void send(String s) throws IOException{
}
void send(int i) throws IOException{
}
}
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.runners.MockitoJUnitRunner;
@RunWith(MockitoJUnitRunner.class)
public class OverloadedTest {
@Test(expected = IllegalStateException.class)
public void testDoSomething() throws Exception {
final Something mock = mock(Something.class);
final AnotherThing anotherThing = new AnotherThing(mock);
doThrow(new IllegalStateException("failed")).when(anotherThing.doSomething(anyString()));
}
}`
你把右括号放错了地方。当使用doverb().When()
语法时,对When
的调用应该只包含该对象,这使Mockito有机会停用被截断的期望,并且还防止Java认为您试图在任何地方传递void
值。
doThrow(new IllegalStateException("failed"))
.when(anotherThing.doSomething(anyString()));
// ^ BAD: Method call inside doVerb().when()
doThrow(new IllegalStateException("failed"))
.when(anotherThing).doSomething(anyString());
// ^ GOOD: Method call after doVerb().when()
请注意,这与不使用doverb
时调用when
不同:
// v GOOD: Method call inside when().thenVerb()
when(anotherThing.doSomethingElse(anyString()))
.thenThrow(new IllegalStateException("failed"));
我试图通过在传入字符串“John”时返回一个用户对象来建立类(spring-data-jpa存储库)的方法。 发生的情况是,在userService中,当调用users.findbyUsername(“John”)时,它总是返回null,而不是我定义的任何用户对象: 当我在测试方法中放置断点并比较users和UserService.users时,它们是相等的。 pom版本
问题内容: 因此,我开始为我们的Java Spring项目编写测试。 我使用的是JUnit和Mockito。有人说,当我使用when()… thenReturn()选项时,可以模拟服务,而无需模拟它们。所以我要做的是设置: 但是无论我执行哪一个子句,我总会得到一个NullpointerException,这当然是有道理的,因为input为null。 另外,当我尝试从对象模拟另一个方法时: 在那里,
问题内容: 考虑以下代码: 编译器抱怨正在尝试对行为进行存根的行。关于如何使用存根方法返回带有有界通配符的类型的任何指针? 问题答案: 您也可以为此使用非类型安全方法doReturn, 正如在Mockito的Google组中讨论的那样。 尽管它比起来简单,但再次请注意,它不是类型安全的。如果您担心类型安全,那么米尔豪斯的答案是正确的。 额外细节 要明确的是,这是观察到的编译器错误, 我相信编译器已
问题内容: 我最近已经问了几个有关jUnit和Mockito的问题,但我仍然很努力地把握住这个问题。这些教程都是针对非常简单的示例的,因此我正在努力扩大测试用例以适合我的课程。 我目前正在尝试为Webapp中我的一个代理中的方法编写一些测试用例。该方法与代理内部的其他两种方法交互以验证某些对象。我现在只想测试这种方法。 这是我尝试做的事情: 创建我的代理的Mockito对象,如下所示: 使用Moc
我最近问了几个面向jUnit和Mockito的问题,但我仍然很难掌握其中的诀窍。这些教程都是针对非常简单的示例,所以我很难扩展我的测试用例来为我的类工作。 我目前正试图为我在WebApp中的一个代理中的一个方法编写一些测试用例。该方法与代理内部的几个其他方法交互,以验证某些对象。我现在只想测试一下这个方法。 使用Mockito设置存根(希望是正确的术语)。如下所示: 尝试执行我的方法,如下所示:
我有一个返回类型为的方法。它还可以抛出许多异常,所以我想测试一下那些被抛出的异常。所有尝试都失败了,原因相同: 类型Stubber中的(T)不适用于参数(void)时的方法 有什么想法,我可以如何获得方法抛出一个指定的异常?