Когда я использую следующий код в своем тестовом классе:
Mockito.when(accountHelper.convertAccountToJson(account)).thenReturn(jsonObject);
он возвращает jsonObject. Однако в моем AccountController следующий код возвращает значение null:
JSONObject accountJson = accountHelper.convertAccountToJson(account);
Может кто-нибудь объяснить, почему фиктивный ответ не отражается? Заранее спасибо.
Вот мой код: TestClass
@RunWith(MockitoJUnitRunner.class)
public class AccountControllerTest {
@InjectMocks private AccountController accountController;
@Mock private AccountHelper accountHelper;
MockMvc mockMvc;
@Before
public void setup() throws Exception {
MockitoAnnotations.initMocks(this);
mockMvc = MockMvcBuilders.standaloneSetup(accountController).build();
}
@Test
public void createAccountEmptyMessage() throws Exception{
String jsonString = "{}";
String expectedReturnBody = "{\"name\":"test"}";
Account account = new Account(test);
JSONObject jsonObject = new JSONObject("{\"name\":"test"}");
Mockito.when(accountHelper.convertAccountToJson(account)).thenReturn(jsonObject);
mockMvc.perform(post("/createAccount").contentType(MediaType.APPLICATION_JSON).characterEncoding("UTF-8")
.accept(MediaType.APPLICATION_JSON).content(jsonString))
.andExpect(content().string(expectedReturnBody));
}
}
HelperClass
@Component
public class AccountHelper {
public JSONObject convertAccountToJson(Account account) {
String jsonString;
JSONObject json;
Gson gson = new Gson();
try{
jsonString = gson.toJson(account);
json = new JSONObject(jsonString);
logger.info(jsonString);
} catch (Exception e) {
return null;
}
return json;
}
Контроллер
@RestController
public class AccountController {
@Autowired private AccountService accountService;
@Autowired private AccountHelper accountHelper;
@RequestMapping(method = RequestMethod.POST, value = "/createAccount")
public ResponseEntity<Object> createAccount(@RequestBody(required= false) Account account) {
try {
JSONObject accountJson = accountHelper.convertAccountToJson(account); //Return null
//Create Account
return new ResponseEntity(accountJson.toString(), HttpStatus.OK);
} catch (Exception e) {
return new ResponseEntity(e.getMessage(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
}
jsonObject
, когда он получитaccount
. Так почему же он должен возвращатьnull
, как ваша реальная реализация? - person QBrute   schedule 25.02.2017MockMvc
, но когда вы говоритеwhen(accountHelper.convertAccountToJson(account))
, вы говорите макету ожидать этот точный экземплярaccount
. Где этот экземпляр передаетсяcreateAccount
? Где-то должен бытьcreateAccount(account)
, чтобы это работало. - person Christopher Schneider   schedule 25.02.2017any()
, вам все равно, что это за объект. Я бы сказал, что использованиеany()
, хотя и делает ваш тест пройденным, в данном случае является бесполезным тестом. Вы должны просмотреть этот ответ, чтобы увидеть, как на самом деле передатьaccount
Переменная. Обратите внимание на вызов метода.param()
. - person Christopher Schneider   schedule 25.02.2017Mockito.when(accountHelper.convertAccountToJson(account)).thenReturn(jsonObject);
в своем тестовом классе, среда тестирования не может распознать, что учетная запись (в моем тестовом классе) является учетной записью @RequestBody (в моем контроллере). В результате макет не применяется. Все еще пытаюсь понять, как это исправить... - person SL07   schedule 27.02.2017