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));
|
}
|
}
|