当前位置: 首页 > 知识库问答 >
问题:

Mockito模拟运行Autowired类对象

邵刚洁
2023-03-14

我有下课情节。在测试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();
    }
}

例如,Console在返回true之前应该给我“inside Service class”。

提前道谢!

共有1个答案

韦飞尘
2023-03-14

您需要创建您的服务的实例(或它的模拟),并将其通道设置为您的模拟通道,然后将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)

 类似资料:
  • 有许多方法可以使用mockito初始化模拟对象。其中什么是最好的方法? 1. 建议我有没有比这些更好的方法...

  • 基类 在派生类中不应用组合和其他函数。如果是,我是否应用了错误的模式?我应该如何处理相同的?

  • 我使用的是Spring3.1.4.Release和Mockito1.9.5。在我的春季课上,我有: 我想为我的“Defaulturl”字段模拟一个值。请注意,我不想模拟其他字段的值--我希望保持这些字段的原样,只保留“Defaulturl”字段。还要注意,我的类中没有显式的“setter”方法(例如),我不想仅仅为了测试的目的创建任何方法。 既然如此,我如何模拟一个字段的值呢?

  • 我正在使用Mockito编写单元测试,但我在模仿注入的类时遇到了问题。问题是两个注入的类是相同的类型,仅通过它们的注释来区分。如果我试图简单地模拟,那么在我的测试中,该模拟不会被注入,并且该对象为。我如何模拟这些对象?

  • 问题内容: 有很多方法可以使用MockIto初始化模拟对象。其中最好的方法是什么? 1。 2。 [编辑] 3。 如果有其他方法可以建议我… 问题答案: 对于模拟初始化,使用或是严格等效的解决方案。从MockitoJUnitRunner的javadoc中: 当你已经在测试用例上配置了特定的运行器时,可以使用第一个解决方案(带有)。 第二个解决方案(带有)更经典,也是我的最爱。代码更简单。使用转轮提供