【问题标题】:I am getting an exception in JUnit Test, Is there a way to control it我在 JUnit 测试中遇到异常,有没有办法控制它
【发布时间】:2021-02-03 14:03:36
【问题描述】:
public class Foo {
  private BarFactory barFactory;

  public Foo(BarFactory factory) {
    this.barFactory = factory;
  }

  public void foo() {
    service();
    Bar bar = this.barFactory.createBar();
    bar.someMethod();
  }
  
  public void service(){
    //Performs some service 
  }

}




Foo foo = new Foo(myFactory);

@Test
public void testDoFoo() {
  Bar bar = mock(Bar.class);

  foo.foo();//service() method throws an exception

  verify(bar, times(1)).someMethod();
}

我必须验证 bar.SomeMethod() 已运行一次,但 service() 方法在 UT 中执行 foo() 方法时抛出错误。有没有办法只测试 bar.SomeMethod() 忽略 UT 中的服务方法。 我不需要测试 Service() 方法。

【问题讨论】:

  • 欢迎来到 SO。你编写代码的方式不允许你做你想做的事。您可以做的是编写一个单元测试以确保服务正常运行,然后运行您的集成测试(您编写的内容)或从 foo() 中删除 service()。基本上要么修复 service() 要么删除它的调用。

标签: java spring junit mockito powermockito


【解决方案1】:

Mockito 有一个 doNothing 方法,可让您将 void 方法设置为不执行任何操作。

请看下面的例子:

@RunWith(MockitoJUnitRunner.class)
public class FooTest {

    @Spy
    @InjectMocks
    private Foo foo;

    @Mock
    private BarFactory myFactory;

    @Mock
    private Bar bar;

    @Test
    public void testDoFoo() {
        doReturn(bar).when(myFactory).createBar();
        doNothing().when(foo).service();

        foo.foo();

        verify(bar, times(1)).someMethod();
    }

}

【讨论】:

    猜你喜欢
    • 2017-02-07
    • 1970-01-01
    • 1970-01-01
    • 2014-01-10
    • 1970-01-01
    • 2012-12-14
    • 1970-01-01
    • 2016-11-30
    • 2015-04-06
    相关资源
    最近更新 更多