簡體   English   中英

JUnit Mockito測試和監視2種單獨的方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM