java - 在 spring 中使用 Autowiring Set 时,如何模拟所有实现相同接口(interface)的类?

标签 java spring mocking mockito junit4

有以下类(class):

public class A {
     @Autowired
     private Set<IClient> clients;  
 }

public class B implements IClient { }

public class C implements IClient { }


@RunWith(MockitoJUnitRunner.class)
public class Atest {
    @InjectMocks
    A a;

    @Mock
    IClient clients;
}

如何对包含类 BC 的接口(interface) Set 使用模拟?

最佳答案

使用构造函数注入(inject)而不是字段注入(inject),然后创建两个模拟,将它们放入一个集合中,并使用该集合调用构造函数。例如:

public class Atest {
    private A a;

    @Mock
    private IClient mockAClient;

    @Mock
    private IClient mockBClient;

    @Before
    public void prepare() {
        a = new A(new HashSet<>(Arrays.asList(mockAClient, mockBClient));
    }

}

关于java - 在 spring 中使用 Autowiring Set 时,如何模拟所有实现相同接口(interface)的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40958030/

相关文章:

java - 使用Spring框架的构造函数依赖注入(inject),无法保留值

java - com.sun.proxy.$Proxy219 无法使用 Java Config 进行转换,但它可以与 xml 一起正常工作

module - 在单个 Jest 测试中模拟多个模块

go - 如何模拟接口(interface)实现

python - 使用 __init__.py 模拟补丁

java - lg(N) 时间内的 AVL 树连接操作算法或伪代码

java - 在 crate.yml 中启动具有特定 HEAP 数量的节点

java - 无需重新编译整个项目即可修改 Keycloak 源代码

java - 如何保存单元格中的新值而不是旧值?

java - 获取更详细的 Spring Bean 初始化异常