我的Java项目使用Spring,我有一个接口Connector
,它由几个类实现,ConnectorV1
、ConnectorV2
等等。
这些类被注解为@Component("V1")
、@Component("V2")
等以进行区分。这些类是针对请求范围配置的。例如:
@Component("V2")
@Scope(value = WebApplicationContext.SCOPE_REQUEST, proxyMode = ScopedProxyMode.INTERFACES)
public class ConnectorV2 implements Connector {
我的一个集成测试类使用@Autowired @Qualifier("V2")
来获取ConnectorV2
的一个示例作为classUnderTest
并测试它。我最近发现我不小心连接了ConnectorV1
并收到了奇怪的测试结果。因此,我想在其中一个测试方法中再次检查我手头是否真的有正确的类。
不幸的是,我AssertclassUnderTest
的具体类的所有尝试都失败了,因为运行时的示例首先是com.sun.proxy$Proxy{someNumber}
,即使像AssertJ的assertThat(classUnderTest).isInstanceOf(ConnectorV2.class)
这样的灵活Assert也无法标识实际的类。
有没有办法超越代理,看到它封装的“真实的”类?
1条答案
按热度按时间aiazj4mn1#
你可以使用
AopProxyUtils.ultimateTargetClass(controller)
。下面是一个简单的例子:不过,你确定这是个好主意吗?这将把测试和实现结合起来。B.D.D.方法建议测试行为,并从测试中抽象出实现细节--使重构更容易。无论如何,希望这有帮助。如果有帮助,我将感激你投赞成票。