JMockit取消封装以设置参数化接口的多个字段



我有一个服务Impl类,它具有以下两个自动连接的字段:

@Service
public class OServiceImpl implements OService {
@Autowired
private MessageSender<EntityA> messageBrokerEventProducerA;
@Autowired
private MessageSender<EntityB> messageBrokerEventProducerB;

我想编写junit,在这里我可以使用jmockit模拟上面两个接口的实现。

public class TestClass {
@Autowired
OService oService;
private static class MockMessageBrokerEventProducerA implements MessageSender<EntityA> {
@Override
public void sendMessage(EntityA message) {
System.out.println("mock A called");
}

}
private static class MockMessageBrokerEventProducerB implements MessageSender<EntityB>{
@Override
public void sendMessage(EntityB message) {
System.out.println("mock B called");
}

}
private MessageSender<A> mockMessageBrokerEventProducerA;
private MessageSender<B> mockMessageBrokerEventProducerB;
@BeforeEach
public void mockSetuUp() {

mockMessageBrokerEventProducerB = new MockMessageBrokerEventProducerB();
mockMessageBrokerEventProducerA = new MockMessageBrokerEventProducerA();
Deencapsulation.setField(oService, mockMessageBrokerEventProducerA);
Deencapsulation.setField(oService, mockMessageBrokerEventProducerB);
}

上面的设置不起作用,它抛出一个错误:java.lang.IollegalArgumentException:类型为…的值指向的多个实例字段。。。。可以分配的类中存在。只要impl类中只有一个接口是自动连接的,并嘲笑那个接口,它就可以很好地工作。只要impl类中有一个以上接口(与泛型相同的接口(的自动布线,就会引发上述错误。我应该如何解决这个问题?

我用以下方法解决了它:

Deencapsulation.setField(oService, "messageBrokerEventProducerA", 
mockMessageBrokerEventProducerA);

最新更新