2015-04-15 29 views
1

我必須休息控制器建立交易Spring Boot Rest MVC。 Mockito和其他保證。不能嘲笑實例

@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(); 
} 

它不工作。我的測試不與模擬進行交互。看起來像使用貨幣的非模擬實例。

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.但它不起作用。

+0

你會發布貨幣接口嗎?或者至少是交易所使用的方法? – MarkOfHall

+0

當您的測試期待和驗證_getBalance_時,事務正在調用_buildTransaction_和_get_。預計哪些方法會被嘲笑? – MarkOfHall

回答

0

我發現有什麼問題。 這裏是固定的部分代碼

@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

我不認爲你需要使用@Autowired註釋。 我通常只是用@Mock