[英]Running integration tests for a spring-boot REST service using gradle
[英]Spring Boot (REST Service) Integration tests fail with a null pointer exception
我正在為我的 REST API 編寫集成測試。
以下是課程。
由於 null 指針異常,測試失敗。 當我設置調試斷點並檢查時,我看到在 class CategoryConfiguration
中, this.categoryConfigurationProperties.getValuesFromProperties()
行返回null
。
如何確保CategoryConfigurationProperties
在測試中正確初始化並從application-category.yml
文件加載值。
@RestController
public class MyController {
@Autowired
MyService myService;
public ResponseEntity<MyResponse> createProduct(...) {
myService.createProduct(...);
...
return...;
}
}
@Service
public class MyServiceImpl implements MyService {
@Autowired
MyProductHelper myProductHelper;
public Product createProduct(...) {
Category category = myProductHelper.getCategory(...);
...
}
...
}
@Component
public class MyProductHelper {
@Autowired
@Qualifier("productCategoryMap")
private Map<Product, Category> productCategoryMap;
public Category getCategory(...) {
return productCategoryMap.get(...);
}
}
@Configuration
@EnableConfigurationProperties(CategoryConfigurationProperties.class)
public class CategoryConfiguration {
private final CategoryConfigurationProperties categoryConfigurationProperties;
public CategoryConfiguration(CategoryConfigurationProperties categoryConfigurationProperties) {
this.categoryConfigurationProperties = categoryConfigurationProperties;
}
@Bean(name = "productCategoryMap")
public Map<Product, Category> productCategoryMap() {
this.categoryConfigurationProperties.getValuesFromProperties();
...
return ...;
}
...
}
@EnableConfigurationProperties
@ConfigurationProperties(prefix = "my-config")
@AllArgsConstructor
@Getter
public class CategoryConfigurationProperties {
Map<String,Map<String,List<String>>> valuesFromProperties;
}
@ExtendWith({SpringExtension.class,MockitoExtension.class})
@SpringBootTest(classes = {MyApplication.class},webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ContextConfiguration(classes = CategoryConfiguration.class)
@ActiveProfiles(profiles = "test")
@AutoConfigureMockMvc
@TestPropertySource(properties = {"spring.config.location=classpath:application-category.yml,classpath:application.properties"})
class MyControllerIntegrationTest {
@Autowired
private MockMvc mockMvc;
@Autowired
WebApplicationContext webApplicationContext;
@MockBean
CategoryConfiguration categoryConfiguration;
@BeforeEach
public void setup() {
...
}
@Test
void testCreateProduct() {
MvcResult result = mockMvc.perform(...);
// assert
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.