对调用外部服务的 class 进行单元测试

Unit testing a class that calls out to external service

我有以下 class:

public class SomeClass {

    private Dependency dependency;

    public SomeClass(Dependency dep){
        this.dependency = dep;
    }


    public void doSomething(String s){
        Foo f = dependency.getFoo(s);
        f.doWork(); // fails because f is null
    }
}

我正在尝试编写一个单元测试,它将涵盖 doSomething 方法,其中 getFoo 是我试图模拟的外部调用,如下所示:

@Mock
private Dependency dep;

@InjectMocks
private SomeClass _sc;


@Test
public void testSimple() {

Foo ff = new Foo();

when(dep.getFoo("abc")).thenReturn(ff);


SomeClass sc = new SomeClass();

sc.doSomething("abc"); // fails on null pointer exception

}

不幸的是,我在单元测试中遇到空引用异常 - 因为没有返回模拟 class。我该如何解决?

你应该使用

_sc.doSomething("abc");

不是sc.doSomething("abc");

首先确保您的测试 class 带有 MockitoJUnitRunner 注释。

@RunWith(MockitoJUnitRunner.class)

其次,在你的测试中,你应该使用你的目标测试 class “_sc”,它被注入了模拟。