У меня есть функция, которую я хочу протестировать ( verifyOrder ), для которой нужен объект "Клиент-клиент" , который определяется путем вызова метода из другого класса "CustomerManagement " с вызовом функции customerManagement.getVerifiedCustomer ()
Я хочу смоделировать класс customerManagement, чтобы при вызове функции в моем ClassBeingTested (CartController) он использовал нужный объект "Customer".
Поэтому я попробовал обычные методы насмешки над классом CustomerManagement и функцией when (). ThenReturn () из Mockito, но безрезультатно. Создание шпиона CustomerManagementClass работало еще хуже, так как Mockito выдавал ошибку, подтверждающую, что класс не может быть поддельным. (обратите внимание, что теперь издевательство выдает ошибки).
@Controller
@SessionAttributes("cart")
@GetMapping("/orderScreen/orderConfirm")
CustomerOrder order;
public String confirmOrder(@RequestParam("decide") String decider, @ModelAttribute Cart cart) {
Customer customer = customerManagement.getVerifiedCustomer();
order = new CustomerOrder(customer);
if(decider.equals("takeItYourself")){
order.setDeliverableState(false);
} else {
order.setDeliverableState(true);
}
if (cart.getPrice().isGreaterThanOrEqualTo(Money.of(30, EURO))){
return "redirect:freeBeverage";
}
createOrder(cart);
return "redirect:complete";
}
@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)
public class CartControllerTest{
@Autowired
CartController cartController;
Customer customer;
CustomerManagement customerManagement;
@Before
public void setUp(){
initMocks(this);
customer = new Customer("Jane", "Doe", "123");
customerManagement = mock(CustomerManagement.class)
when(customerManagement.getVerifiedCustomer()).thenReturn(customer);
cartToEmpy = new Cart();
cartToEmpy.addOrUpdateItem(beverage, 3);
}
@Test
public void confirmOrderPickUp(){
String decider = "takeItYourself";
String returnedView = cartController.confirmOrder(decider, cartToEmpy);
assertThat(returnedView).isEqualTo("redirect:complete");
}
}
Поэтому, когда я запускаю этот тестовый класс, он полностью игнорирует when (). ThenReturn () и запускает функцию с объектом Customer customer из моего класса, который тестируется, какой из курс выдает IllegalArgumentException , поскольку для этого Customer задано значение null, а конструктор CustomerOrder не принимает нулевые объекты Customer.
Обратите внимание, что я не могу изменить код классов и поэтому должен найти способ проверить это.
PowerMock также, к сожалению, не подходит, так как он, похоже, не любит jdk 9 и работает совместно с Mockito. Я пытался и потратил впустую часы на это.
Я действительно начинаю впадать в отчаяние, так как у меня есть другие подобные функции, которые я должен проверить, где я должен смоделировать другие результаты от функций, вызываемых с помощью функции, которую я хочу проверить. Заранее благодарю за любую доступную помощь.