java - 如何在某些 Spring 测试中注入(inject)类的特定实例?

标签 java spring unit-testing dependency-injection

我有一个 Spring 组件,它需要一个 Clock 作为依赖项:

@Component
public class MyClass {
    private final Clock clock;

    @Autowired
    public MyClass(Clock clock){
        this.clock = clock
    }
}

对于我的大多数测试,我有一个模拟时钟,它被注释为 @Bean 并被正确注入(inject)。然而,对于我的一些测试,我需要使用不同的模拟时钟。我如何为这些测试使用不同的模拟?

public class MyClassTest {

    @Autowired
    private MyClass myClass;

    @Test
    public void test1(){
         // use the standard mock clock
    }

    @Test
    public void test2(){
         // inject clock.fixed(Instant.parse("2018-01-01T00:00:00Z"), UTC);
    }


    @Test
    public void test3(){
         // inject clock.fixed(Instant.parse("2019-12-12T23:59:59Z"), UTC);
    }
}

因此,在这个示例中,我想覆盖 test2test3 中的模拟时钟。

最佳答案

您可以使用ReflectionTestUtils注入(inject)各种模拟。它就是为此目的而设计的。

@Test
public void test2(){
     // inject clock.fixed(Instant.parse("2018-01-01T00:00:00Z"), UTC);
     ReflectionTestUtils.setField(myClass, "clock", mockClock);
}

关于java - 如何在某些 Spring 测试中注入(inject)类的特定实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49795357/

相关文章:

javascript - 使用 displaytag 在表(网格)中添加新列

unit-testing - 使 Logback 在 ERROR 级别的日志事件上抛出异常

javascript - 如何使用 Jest 和 jsdom 来测试 console.log?

java - 将 ImageView 移动到布局的右侧

java.lang.IllegalArgumentException : The key path element name is longer than 500 characters exception in App Engine datastore while executing IN query

java - 实体关系未正确填充

java - 在Web应用程序中实现生产者-消费者的最佳方式

iOS - 如何在发布方案上运​​行单元/用户界面测试

java - 是否有一个好的 32 位哈希函数可用于幂等性?

java - Spring 工具套件 : Copying and renaming a Maven Web App