package com.battery.business.service.impl; import static org.junit.jupiter.api.Assertions.assertTrue; import org.junit.jupiter.api.Test; import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Service; import com.battery.device.api.TestDataObservationAdapter; /** * 取数入口的装配契约:开发模拟器既是 Spring Bean,又实现了测试数据观测契约, * 所以业务侧注入的那个 Bean 必须显式声明为首选,否则上下文里出现两个候选会启动失败。 * 这里断言的是"哪个 Bean 会被注入"这个结构性事实,而不是 Spring 内部行为。 */ class RoutingAdapterWiringContractTest { @Test void routingAdapterIsThePreferredTestDataObservationBean() { assertTrue(TestDataObservationAdapter.class.isAssignableFrom(RoutingTestDataObservationAdapter.class)); assertTrue(RoutingTestDataObservationAdapter.class.isAnnotationPresent(Service.class), "取数入口必须是可注入的 Bean"); assertTrue(RoutingTestDataObservationAdapter.class.isAnnotationPresent(Primary.class), "来源实例自己也实现该契约时必须显式首选路由入口,否则注入出现两个候选"); } @Test void developmentSimulatorAlsoExposesTheContractWhichIsWhyPreferenceIsNeeded() { assertTrue(TestDataObservationAdapter.class .isAssignableFrom(com.battery.device.simulator.BtsDevelopmentSimulator.class)); } }