#java #junit5 #rest-assured #mockmvc #spring-cloud-contract
#java #junit5 #будьте уверены #mockmvc #spring-cloud-contract
Вопрос:
Я пытался создать статический метод на стороне производителя для создания и запуска контрактов с контроллером, но тесты выполняются против фактического метода
Вот контроллер в producer, где «getId» — это статический метод в классе
@PostMapping(path = "/getone", consumes = "application/json", produces = "application/json")
public ResponseEntity<Response> getone(@RequestBody Test[] test) {
String appId = Utils.getId();
return new ResponseEntity<>(service.pub(test,id), HttpStatus.OK);
}
Вот базовый тест на стороне производителя, который генерирует контракты
@ExtendWith(SpringExtension.class)
@ActiveProfiles("test")
@SpringBootTest
public class ContractTest {
@Autowired
private WebApplicationContext context;
@Mock
private Utils utils;
@BeforeEach
void setup() {
try (MockedStatic mocked = mockStatic(Utils.class)) {
mocked.when(() -> Utils.getId()).thenReturn("194");
RestAssuredMockMvc.webAppContextSetup(this.context);}
}
Я также пытался использовать автономную настройку, но безуспешно
@Autowired
private ApiController controller;
@BeforeEach
void setup() {
try (MockedStatic mocked = mockStatic(Utils.class)) {
mocked.when(() -> Utils.getId()).thenReturn("194");
StandaloneMockMvcBuilder standaloneMockMvcBuilder = MockMvcBuilders.standaloneSetup(controller);
RestAssuredMockMvc.standaloneSetup(standaloneMockMvcBuilder);}
Тесты выполняются для фактического класса, а не для фиктивного значения. Есть ли какой-либо способ смоделировать статический метод getId() и сгенерировать тесты?
Ответ №1:
Можете ли вы попробовать заменить эту строку:
try (MockedStatic mocked = mockStatic(Utils.class)) {
Для
try (MockedStatic<Utils> mocked = mockStatic(Utils.class)) {
Комментарии:
1. Привет, @Steephen, спасибо за ответ, но это не сработало
2. @sn879 Можете ли вы удалить
@Mock private Utils utils;
эту строку из своего тестового класса вместе с вышеуказанными изменениями3. Я думаю, что это неиспользуемая зависимость, которую я только что скопировал, но я попытался удалить ее и повторно запустить тесты, и она вызывает фактический метод, а не макет