在一个 Car
我正在使用的类构造函数 @Value
将值作为参数注入的注解。
@Service
public class Car {
public Car(@Value("${app.fabric.kafka.topics.sometopic}") final String topic) {
}
...
}
``` `GarageService` 类声明和使用 `Car` 示例。
@Component
@AllArgsConstructor
public class GarageService {
private @NonNull final Car;
...
}
在一个 `GarageServiceTest` i类使用 `@InjectMock` 示例化测试对象 `@Mock` 注入另一个示例。
@ContextConfiguration
public class GarageServiceTest {
@Mock private CarService carService;
@InjectMock private GarageService;
...
}
这个类中的测试给出了一个异常:
org.springframework.beans.factory.UnsatisfiedDependencyException:
Error when creating bean 'GarageService' defined in file [.../GarageService.class]:
Unsatisfied dependency expressed through constructor parameter 1,
...
nested exception is org.springframework.beans.factory.BenCreationException:
Error creating bean with name 'Car' defined in file [.../Car.class]: Unexpected exception during bean
creation; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder
app.fabric.kafka.topics.sometopic' in value "${app.fabric.kafka.topics.sometopic}".
问题是如何解决这个例外?我的理解是,在那个测试类中,我需要找到一种注入的方法 `${app.fabric.kafka.topics.sometopic}"` 值转换为bean“car”。
2条答案
按热度按时间iklwldmw1#
我知道你在用Spring撑杆做测试。这意味着spring将初始化
ApplicationContext
为了你的测试。显然,在初始化过程中app.fabric.kafka.topics.sometopic
由于某些原因不可用。这个初始化与mockito的无关
@Mock
/@InjectMocks
注解。如果你想测试GarageService
Spring BeanCarService
被嘲笑时,请尝试以下操作:如果你想要一个单元测试,在
GarageService
是作为常规对象创建的,只是不要使用@RunWih(SpringRunner.class)
/@ExtendWith(SpringExtension.class)
为了这个特殊的测试。如果您在其他测试中遇到相同的问题,其中
CarService
不应该被嘲笑,用@TestPropertySource(properties = "app.fabric.kafka.topics.sometopic=<whatever works>")
或者@SpringBootTest(properties = "app.fabric.kafka.topics.sometopic=<whatever works>")
如果使用Spring Boot。oogrdqng2#
如果您想避免巨大的spring上下文: