簡體   English   中英

如何模擬從測試類的另一種方法獲得的局部變量?

[英]How to mock local variable obtained from another method of tested class?

我有以下課程

class MyClass{
   public void m(InputStream is){
       ...
       Parser eParser = getExcelFileParser();
       eParser.parse(is);
       ...
       eParser.foo();
       eParser.bar();

   }
   public ExcelFileParser getExcelFileParser(){
       ...
   } 
}

在這種情況下如何為方法m編寫單元測試? 我只想模擬eParser對象。

是否可以?

我使用 Mockito 和 PowerMockito

您可以使用spy在 Mockito 中執行您想要的操作(不需要 PowerMock),而根本無需更改您的代碼。

在您的單元測試中,您需要執行以下操作:

ExcelFileParser parser = mock(ExcelFileParser.class);
MyClass myClass = spy(new MyClass());
doReturn(parser).when(myClass).getExcelFileParser();

您可以將 AnotherObject 作為參數傳遞給方法 m 而不是在方法本身中調用 getAnotherObject() 嗎?

前言:我使用的是 EasyMock 而不是 Mockito,所以這可能有點偏離。

你不能在你的測試中創建一個 MyClass 的內部子類來覆蓋 getExcelFileParser 並讓它返回一個模擬嗎? 像這樣:

public class MyClassMock extends MyClass {

     ExcelFileParser _mock;

     public MyClassMock(ExcelFileParser mock) {
          _mock = mock;
     }

     @Override
     public ExcelFileParser getExcelFileParser() {
         return _mock;
     }
}

我還沒有測試過這個所以可能會有問題,但基本的想法應該是正確的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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