Je contrôleur Reste à construire transactionSpring Boot Rest MVC. Mockito et reste assurés. Ne peut pas se moquer de l'instance
@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;
}
Le code de test d'unité est assez simple:
@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();
}
Il ne fonctionne pas. Mon test n'interagit pas avec Mock. On dirait qu'une instance non mockée de Currency est utilisée.
UPD
J'ai fait une Currecy de classe simple à comprendre quel est le problème.
@Component
public class Currency {
public Optional<String> getBalance() {
System.out.println("Get Balance!!!!!");
return Optional.of("1111");
}
}
et ils ont changé la maquette:
when(currency.getBalance()).thenReturn(Optional.of("7777"));
Dans mon contrôleur je viens appeler getBalance, vérifier le code ci-dessus. Je m'attends à obtenir 7777 au lieu de 1111. Mais ça ne marche pas.
Souhaitez-vous l'interface de la monnaie? Ou au moins les méthodes que les transactions utilisent? – MarkOfHall
La transaction appelle _buildTransaction_ et _get_ pendant que votre test attend et vérifie _getBalance_. Quelles méthodes s'attendent à être moqué? – MarkOfHall