В тестовом примере Spring Boot JUnit для проверки настраиваемого исключения выбрасывается AssertionError вместо CustomException - PullRequest
0 голосов
/ 01 октября 2018

Я тестирую приложение Spring boot MVC, которое принимает MultipartFile в качестве входных данных.Мой класс обслуживания будет выдавать пользовательское исключение, если формат файла отличается от .json.Я написал тестовый пример JUnit, который тестирует этот сценарий.

Вместо того, чтобы выдавать мое пользовательское исключение (expected = FileStorageException.class) мой тестовый пример выдает AssertionError.

Как решить эту проблему и проверить сообщение об исключении, используя .andExpect(content().string("Wrong file format. Allowed: JSON."))

Исключение

09: 36: 48.327 [main] DEBUG org.springframework.test.web.servlet.TestDispatcherServlet - не удалось выполнить запрос com.test.util.exception.FileStorageException: неправильноформат файла.Разрешено: JSON.

Код

@WebAppConfiguration
@ContextConfiguration(classes = WebConfig.class, initializers = ConfigFileApplicationContextInitializer.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class UploadTest
{

  @Autowired
  private WebApplicationContext webApplicationContext;

  private MockMvc mockMvc;

  @Before
  public void setup()
  {
    mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
  }

  /**
   * 
   */
  public UploadTest()
  {
    // default constructor
  }

  @Test(expected = FileStorageException.class)
  // @Test(expected= AssertionError.class)
  public void testInvalidFileFormat() throws Exception
  {
    try
    {
      MockMultipartFile testInput = new MockMultipartFile("file", "filename.txt", "text/plain", "some json".getBytes());
      mockMvc.perform(MockMvcRequestBuilders.multipart("/uploadFile").file(testInput))
          // .andExpect(status().isInternalServerError()).andExpect(content().string("Wrong
          // file format. Allowed: JSON."))
          .andDo(print());
    }
    catch (Exception e)
    {
      fail(e.toString());
    }
  }
}

1 Ответ

0 голосов
/ 01 октября 2018

JUnit знает только об исключениях, которые вызываются методом теста (в вашем примере testInvalidFileFormat(). Поэтому он может только проверять эти исключения.

Вы перехватываете каждое исключение, которое выдается mockMvc.perform(...)и вместо этого выведите AssertionError из строки

fail(e.toString());

Это - AssertionError, который вы видите в результатах теста.

Если вы хотите проверить исключения, вы не должны ловитьих в вашем тесте:

@Test(expected = FileStorageException.class)
public void testInvalidFileFormat() throws Exception
{
  MockMultipartFile testInput = new MockMultipartFile(
    "file", "filename.txt", "text/plain", "some json".getBytes()
  );
  mockMvc.perform(MockMvcRequestBuilders.multipart("/uploadFile").file(testInput))
      // .andExpect(status().isInternalServerError()).andExpect(content().string("Wrong
      // file format. Allowed: JSON."))
      .andDo(print());
}

Кстати, вам не нужно явно добавлять конструктор по умолчанию и можно удалять строки

/**
 * 
 */
public UploadTest()
{
    // default constructor
}

Он называется конструктором по умолчанию, потому что этоавтоматически там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...