[英]JUnit Mockito Testing and Spying 2 separate methods
我有一個要編寫junit測試的服務類。 這是該服務類:
public class FooService {
private BarService barService;
public FooService(BarService barService) {
this.barService = barService;
}
public Foo methodOne(int a) {
double value = methodTwo();
//do some other stuff and return Foo
}
public double methodTwo() {
//do stuff
}
}
這是我的junit測試:
public class FooServiceTest {
@Mock
BarService barService;
FooService fooService;
@Before
public void init() {
MockitoAnnotations.initMocks(this);
fooService = Mockito.spy(new FooService(barService));
doReturn(1.0).when(fooService).methodTwo();
doCallRealMethod().when(fooService).methodOne(1);
}
@Test
public void test() {
fooService.methodOne(1);
assertThat(.....)
}
}
我的問題是,當我運行測試時,它實際上從未調用methodOne
。 它只是跳過FooService
所有內容,而直接轉到asserThat(...)
行。 我覺得這與在fooService對象上監視有關。
我怎么能寫這個FooService接口,我做出一個真正的呼叫JUnit測試methodOne
但我嘲笑的回報methodTwo
?
我想你把它弄復雜了。 而且您對spy
是正確的:
public class FooService {
BarService barService;
public FooService(BarService barService) {
this.barService = barService;
}
public String methodOne(int a) {
double value = methodTwo();
return "Hello from method 1 - " + value;
}
public double methodTwo() {
return 1;
}
}
public class MyTest {
private BarService barService = Mockito.mock(BarService.class);
private FooService fooService = Mockito.spy(new FooService(barService));
@Test
void test() {
doReturn(7.0).when(fooService).methodTwo();
String result = fooService.methodOne(1);
assertThat(result).isEqualTo("Hello from method 1 - 7.0");
}
}
如果使用間諜,則所有未模擬的方法都是“真實的”方法。 因此,無需說doCallRealMethod()
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.