У меня есть контроллер Rest построить транзакцияSpring Boot Rest MVC. Mockito и Rest Assured. Не можете издеваться экземпляру
@RestController
@RequestMapping(value = "/transactions")
public class Transactions {
@Autowired
private Currency currency;
@RequestMapping(value = "/build", method = RequestMethod.POST)
@ResponseBody
public JsonData build(@RequestBody JsonNode json) throws Exception {
.......
System.out.println(currency.getBalance().get());
return result;
}
Блок-тестирования кода довольно прост:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = Application.class)
@WebIntegrationTest
@ActiveProfiles(profiles = "test")
public class TransactionsTest {
@Mock
@Autowired
private Currency currency;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this); }
@Test
public void testBuild() {
json = ".......";
when(currency.getBalance()).thenReturn(Optional.of("7777"));
given().contentType(ContentType.JSON).body(json).when().post("/transactions/build/")
.then()
.statusCode(HttpStatus.SC_OK)
.body(Matchers.containsString("fee"));
verify(currency).getBalance();
}
Это не работает. Мой тест не взаимодействует с макетом. Похоже, не используется фальшивый экземпляр Currency.
UPD
Я сделал простой класс Currecy, чтобы выяснить, в чем проблема.
@Component
public class Currency {
public Optional<String> getBalance() {
System.out.println("Get Balance!!!!!");
return Optional.of("1111");
}
}
И изменил макет:
when(currency.getBalance()).thenReturn(Optional.of("7777"));
В мой контроллер я просто позвонить getBalance, проверить код, приведенный выше. Я ожидаю получить 7777 вместо 1111. Но он не работает.
Вы бы разместили интерфейс валюты? Или, по крайней мере, методы, используемые Transactions? – MarkOfHall
Транзакция вызывает _buildTransaction_ и _get_, пока ваш тест ожидает и проверяет _getBalance_. Какие методы ожидаются издеваться? – MarkOfHall