- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 Mockito 的新手,我查看了这个示例,但是当它在方法的第一行调用 doNothing()
时,有一个步骤我不明白:
@Test(expected = RuntimeException.class)
public void testConsecutiveCalls() throws Exception(){
doNothing().doThrow(Exception.class).when(b).voidMethod();
a.usesVoidMethod()
verify(b).voidMethod();
a.usesVoidMethod()
}
我确实理解,当第一次调用 voidMehtod()
时没有返回任何内容,而在第二次调用时出现异常。
但是如果我们删除 doNothing.doThrow(Exception.class).when(b).voidMethod();
,测试是否仍然有效并且将测试我们想要测试的内容该方法第二次抛出异常?
最佳答案
几点,编号只是为了方便引用:
mock 的默认行为是每次都返回一个适当的虚拟值,通常为零、null
或空字符串。 spy 的默认行为是调用 spy 的真实实现。当然,通过参数给@Mock
或者Mockito.mock
,你可以使用任意的Answer或者Mockito的standard中的任意一个。或 additional答案。
当多个 Action 作为链的一部分给出时,Mockito 将按顺序执行每个 Action 并永远重复最后一个 Action 。
// calls to foo.bar() return 1, 2, 3, 3, 3...
doReturn(1).thenReturn(2, 3).when(foo).bar();
请注意,这是在同一链中;最近定义的匹配链获胜,因此单独的语句不会产生相同的效果。
doReturn(1).thenReturn(2).when(foo).baz();
doReturn(3).thenReturn(4).when(foo).baz();
// calls return 3, 4, 4, 4... because the first chain is entirely overridden.
doNothing
从覆盖默认行为 或在链中设置一个操作 获取其大部分值(value)。
所以测试尝试做的是第一次doNothing
这样验证就会成功,然后doThrow
第二次时间来满足预期的异常。尽管失败的 verify
会(正确地)使测试失败,因为 Mockito's errors subclass Error and not Exception ,你是对的,删除 doNothing
仍然会通过在第一次调用 a.usesVoidMethod()
时抛出异常来导致测试通过。尽管这对于测试来说已经足够好了——毕竟,您可以在测试本身中看到 doNothing
——更健壮的测试可能如下所示:
@Test
public void testConsecutiveCalls() throws Exception(){
doNothing().doThrow(SomeKnownException.class).when(b).voidMethod();
a.usesVoidMethod();
verify(b).voidMethod();
try {
a.usesVoidMethod();
fail();
} catch (SomeKnownException expected) { /* OK */ }
}
关于java - Mockito,doNothing() When() 的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39822532/
我在其中一个实用程序类中有这行代码 System.setProperty("someProperty", ); 当上面的代码行通过测试执行时,我不希望发生任何事情。我已经用以下注释对该类进行了注释。
我正在使用 Mockito 以及 mockito-inline用于模拟静态方法。我正在尝试申请 doNothing或类似的行为,到静态 void 方法。以下解决方法有效,但我认为应该有一种更方便的方法
当另一个方法中的 spyAnotherService.getUrl(ID) 时,我试图进行 spy /模拟并返回一个虚拟 Url,该方法是 myService.deleteSomething(name
我知道我不应该测试这样的 void 方法,但我现在只是用一个简单的例子来测试 Mockito.doNothing() 。 我的服务类别: @Service public class Service{
我是 Mockito 的新手,我查看了这个示例,但是当它在方法的第一行调用 doNothing() 时,有一个步骤我不明白: @Test(expected = RuntimeException.cla
我用 Java 开发了一个应用程序,我正在尝试使用 Powermockito 创建单元测试(我应该补充一点,我是单元测试的新手)。 我有一个名为 Resource 的类,它有一个名为 readReso
我正在尝试测试我的一个名为 Store 的类,特别是一个名为removeFromFavourite 的方法下面是方法 public void removeFromFavourite(Quote
我试图模拟一个静态 void 方法,我尝试了 PowerMock 但总是遇到 NullPointer 异常。 我们正在尝试模拟以下调用 - public Class XYZ{ public voi
所以我有这个内部调用另一个服务的方法,为了我的测试目的,我不关心这个内部调用,我不希望这个内部服务做任何事情。 例如 public void testMyMethod() { List
我在运行单元测试时遇到以下错误: java.lang.RuntimeException: Method removeCallbacks in android.os.Handler not mocked
在 Mockito 中,如果你想让 void 方法什么也不做,你可以这样做: doNothing().when(_mockedClass).voidMethod(); 有没有办法用 JMockit 来
我有一个在其中调用 void 函数的方法,当我使用 doNothing() 时,它说不允许使用 void 方法。我如何在该特定行中doNothing()? 我正在使用这条线, when(spyColo
我正在尝试模拟 KeyStore 类。模拟之后,如果调用了加载方法,我不希望发生任何事情。因此我写了下面几行来实现这一点。 @PrepareForTest(KeyStoreFactor
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我在测试类中 Autowiring 了一个字段 @Autowired private AbcDAO abcDAO; 并像这样使用它 doThrow(new RuntimeException()).wh
我有一个单元测试来测试将文件上传到 GCP 存储。这是上传文件的代码。 @Override public boolean upload(StorageConfiguration storageConf
以下代码导致 UnfinishedStubbingException PowerMockito.doNothing().when(widgetHelper).invokeAuditService(Ma
我想什么都不做29次,当发生30次调用时,然后抛出ArithmeticException。但我找不到任何可以设置 TIMES 属性的地方。这是我的想象: @Mock DAOclass dao; @Te
主类 public class BootSample { public int call(int m) { System.out.println("Entering into
我需要一个在测试期间调用时返回一些东西的方法,拥有该方法的类实例被实现为 spy 。 我知道 doNothing() 方法只适用于 void 方法。有没有办法通过返回某些东西的方法获得相同的行为? 谢
我是一名优秀的程序员,十分优秀!