0

我有以下课程。在测试 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 之前给我“内部服务类”。

提前致谢 !

4

1 回答 1

1

您需要创建服务的实例(或它的模拟)并将其通道设置为您模拟的通道,然后设置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-testReflectionTestUtils注意:您可以使用 setter 代替)

于 2016-03-31T14:35:37.720 回答