对调用外部服务的 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”,它被注入了模拟。
我有以下 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”,它被注入了模拟。