我希望创建使用Spring上下文和模拟存储库bean的测试。我使用的是Spring Boot 1.3。2.构建快照JUnit Mockito。
以下是我的测试配置类:
@ComponentScan(basePackages = "myapp", excludeFilters =
@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,
value = {
OfferRepository.class
}
)
)
@Configuration
public class TestEdge2EdgeConfiguration {
@Bean
public OfferRepository offerRepository() {
return mock(OfferRepository.class);
}
}
此配置的目的是将OfferPresository从Spring上下文中排除并对其进行模拟,由于此,我将能够编写使用Spring上下文和模拟数据库存储库的测试。
这是我的测试课:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = {TestEdge2EdgeConfiguration.class})
@WebAppConfiguration
public class OfferActionsControllerTest {
@Autowired
private OfferRepository offerRepository;
@Autowired
private OfferActionsController offerActionsController;
@Before
public void setUp(){
MockitoAnnotations.initMocks(this);
}
@Test
public void saveOffer() {
//given
BDDMockito.given(offerRepository.save(any(Offer.class))).willReturn(new Offer());
//when
ResponseEntity<Offer> save = offerActionsController.save(new Offer());
//then
org.springframework.util.Assert.notNull(save);
}
}
测试和测试配置目录为:
src/test/java/myapp
我的应用程序配置和包含OfferRepository目录的包是:
src/main/java/myapp/
问题是Spring Boot没有从TestEdge2EdgeConfiguration加载我的配置。永远不会创建OfferPresository的类和模拟。
有人能帮我吗?
使用Spingockito使用@ReplaceWithMock将bean替换为mock。如果您需要在测试中访问模拟bean,请不要忘记将@Autowired
与@ReplaceWithMock
一起使用。
这是您应该如何做的(假设您正在为OfferActionController编写测试并注入OfferProposition):
@Mock
private OfferRepository offerRepository;
@InjectMocks
private OfferActionsController offerActionsController;
@Before
public void setUp(){
MockitoAnnotations.initMocks(this);
}
您可以按照以下方式编写测试方法:
@Test
public void saveOffer() {
/* Given */
Mockito.when(offerRepository.save(Mockito.any(Offer.class))).thenReturn(new Offer());
//when
ResponseEntity<Offer> save = offerActionsController.save(new Offer());
//then
org.springframework.util.Assert.notNull(save);
}
问题内容: 我尝试使用以下代码段设置spring rest模拟的上下文路径: 但是我收到以下错误: 怎么了? 是否可以在代码中的单个位置(例如直接在构建器中)指定contextPath? 这里的控制器 问题答案: 您需要在传递到的路径中包括上下文路径。 在问题中显示的情况下,上下文路径为并且您想向其发出请求,因此您需要传递给:
我使用Spring Boot 1.3.2,我注意到问题,ComponentScan在我的测试类不工作。我想嘲笑一些春豆。Spring引导是否阻止ComponentScan? 测试配置类: 测试类:
行动时刻 - 模拟NAS的计费 在第3章,FreeRADIUS使用入门,我们介绍了radclient命令。 本部分创建三个可与radclient一起使用的文件,以模拟NAS通常发送到RADIUS服务器的计费数据包。 用于模拟的文件 三个文件中的AVP类似于从hostapd程序发送的AVP。 hostapd是一个守护进程,用于控制Wi-Fi网络上的身份验证。它可以配置为与身份验证一起进行计费,通常在
问题内容: 我不明白为什么无法在此示例中模拟NamedTemporaryFile.name: 测试结果在: 问题答案: 您设置的模拟错误:不是上下文管理器,而是 返回 了一个上下文管理器。将您的设置行替换为: 这样您的测试就可以了。
AssertJ中有来自Hamcrest的everyItem()的模拟吗? 但是在AssertJ中,无论如何,我都必须手动迭代列表。
我有以下情况。JDK 17,Spring-Boot:2.6.2。一个gradle多项目。一个项目是一个库(java-Library,没有Spring启动插件)。另一个项目是带有Spring启动插件的Spring启动应用程序。一般不使用Spring依赖管理插件,而是使用gradle平台概念。应用程序项目包括每个“实现(项目(':...” 图书馆: 库项目和spring boot应用程序项目有不同的包