簡體   English   中英

Mockito模擬運行Autowired類對象

[英]Mockito Mock run Autowired class Object

我有下課的情況。 在測試MyTestableClass時,我希望處理Autowired類。 我只想模擬AutoWired類中的變量。

示例類別如下-

public class MyTestableClass {

    @Autowired
    private MyServiceClass service;

    public void handleError(){
    ...
    service.doSomething();

    }
}

public class MyServiceClass {

    @Autowired
    private JMSChannel channel;

    public void doSomething(){
        System.out.println("Inside Service class");
        .....
        channel.isAvailable();
        .....   
    }
}

@RunWith(MockitoJUnitRunner.class)
public class  MyTestableClassTest {
    private MyTestableClass  testClass= new MyTestableClass();

    private JMSChannel channel;

    @Before
    public void init(){
     channel= mock(JMSChannel.class);
     when(channel.isAvailable()).thenReturn(Boolean.TRUE);  
    }

    @Test
    public void test(){
        testClass.handleError();
    }
}

例如,控制台在返回true之前應給我“內部服務類”。

提前致謝 !

您需要創建服務(或它的模擬)的實例,並將其通道設置為模擬的通道,然后將MyTestableClass#service設置為此。 就像是:

@Before
public void init(){
    channel= mock(JMSChannel.class);
    when(channel.isAvailable()).thenReturn(Boolean.TRUE); 
    MyServiceClass service = new MyServiceClass();
    ReflectionTestUtils.setField(service, "channel", channel);
    myTestableClass = new MyTestableClass();
    ReflectionTestUtils.setField(myTestableClass, "service", service);
}

使用spring-test提供的ReflectionTestUtils注意:您可以改用setter)

暫無
暫無

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

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