我必須休息控制器建立交易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.但它不起作用。
你會發布貨幣接口嗎?或者至少是交易所使用的方法? – MarkOfHall
當您的測試期待和驗證_getBalance_時,事務正在調用_buildTransaction_和_get_。預計哪些方法會被嘲笑? – MarkOfHall