2015-04-15 1 views
1

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.

+0

Souhaitez-vous l'interface de la monnaie? Ou au moins les méthodes que les transactions utilisent? – MarkOfHall

+0

La transaction appelle _buildTransaction_ et _get_ pendant que votre test attend et vérifie _getBalance_. Quelles méthodes s'attendent à être moqué? – MarkOfHall

Répondre

0

J'ai trouvé ce qui n'allait pas. Ici est la partie fixe du code

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = Application.class) 
@WebAppConfiguration 
@ActiveProfiles(profiles = "test") 
public class TransactionsTest { 

private MockMvc mockMvc; 

@Autowired 
private WebApplicationContext context; 

@Mock 
private Currency currency; 

@InjectMocks 
private Transactions transactions; 

@Before 
public void setUp() throws Exception { 
    MockitoAnnotations.initMocks(this); 
    RestAssuredMockMvc.mockMvc = MockMvcBuilders.standaloneSetup(transactions).build(); 
} 
2

Je ne pense pas que vous ayez besoin d'utiliser l'annotation @Autowired. J'ai l'habitude d'utiliser le @Mock