![]() |
粗眉毛的丝瓜 · 【Maven】依赖范围、依赖传递、依赖排除、 ...· 3 月前 · |
![]() |
傻傻的荒野 · 中科大江俊:开发有大脑的「机器化学家」,赋能 ...· 7 月前 · |
![]() |
活泼的饭卡 · SecureRandom.Next(Int3 ...· 1 年前 · |
![]() |
温柔的桔子 · Caused by: ...· 1 年前 · |
![]() |
道上混的甜瓜 · Java根据IP地址获取MAC地址 - ...· 1 年前 · |
我在junit测试中使用mockito。如何使异常发生,然后断言它已经发生(泛型伪代码)?
先回答你的第二个问题。如果你使用的是JUnit 4,你可以用注释你的测试
@Test(expected=MyException.class)
断言已发生异常。要使用mockito“模拟”异常,请使用
when(myMock.doSomething()).thenThrow(new MyException());
让异常像这样发生:
when(obj.someMethod()).thenThrow(new AnException());
通过断言您的测试将抛出这样的异常来验证它是否已经发生:
@Test(expected = AnException.class)
或者通过正常的模拟验证:
verify(obj).someMethod();
如果您的测试旨在证明中间代码处理异常(即不会从您的测试方法中抛出异常),则后一种选择是必需的。
如果您使用的是Mockito4和JUnit 1.10.x,请使用以下命令注释您的测试方法:
@Test(expected = AnyException.class)
要抛出所需的异常,请使用:
Mockito.doThrow(new AnyException()).when(obj).callAnyMethod();
如果您还想测试异常消息,您可以使用JUnit的ExpectedException和Mockito:
@Rule
public ExpectedException expectedException = ExpectedException.none();
@Test
public void testExceptionMessage() throws Exception {
expectedException.expect(AnyException.class);
expectedException.expectMessage("The expected message");
given(foo.bar()).willThrow(new AnyException("The expected message"));
}
与mockito无关,可以捕获异常并断言其属性。若要验证是否确实发生了异常,请在引发异常的语句后的try块中断言false条件。
Assert by exception消息:
try {
MyAgent.getNameByNode("d");
} catch (Exception e) {
Assert.assertEquals("Failed to fetch data.", e.getMessage());
}
或者,如果异常是从类的构造函数抛出的:
@Rule
public ExpectedException exception = ExpectedException.none();
@Test
public void myTest() {
exception.expect(MyException.class);
CustomClass myClass= mock(CustomClass.class);
doThrow(new MyException("constructor failed")).when(myClass);
}
使用 Mockito's doThrow ,然后捕获所需的异常以断言它是稍后抛出的。
@Test
public void fooShouldThrowMyException() {
// given
val myClass = new MyClass();
val arg = mock(MyArgument.class);
doThrow(MyException.class).when(arg).argMethod(any());
Exception exception = null;
// when
try {
myClass.foo(arg);
} catch (MyException t) {