Mock LocalDate.now () и LocalTime.now () для тестирования области - PullRequest
0 голосов
/ 09 июля 2020

Мне нужно смоделировать два метода stati c LocalDate.now() и LocalTime.now() в классе тестирования.

Я использую PowerMock, но получаю эту ошибку при попытке запустить тест:

org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.web.client.RestTemplate]: Constructor threw exception; nested exception is java.lang.NoClassDefFoundError: Could not initialize class javax.xml.transform.FactoryFinder

Мне приходилось пытаться создать @Bean из RestTemplate.class внутри тестового класса и класса конфигурации, но ошибка сохраняется.

У меня только эта ошибка если я запускаю тест с PowerMockRunner.class. Если я попытаюсь запустить его с помощью SpringRunner.class, все будет хорошо, но я не смогу имитировать LocalDate и LocalTime.

Это мой тестовый класс:

@PrepareForTest(LocalDate.class)
@RunWith(PowerMockRunner.class)
@SpringBootTest(webEnvironment = RANDOM_PORT, classes = ChallengeApplication.class)
@ActiveProfiles("test")
public class MockTest {

    @Autowired
    private TestRestTemplate restTemplate;
    private URL base;

    @LocalServerPort
    int port;

    User user = new User("user", "password", "user@test.com");
    HttpEntity<User> userRequest = new HttpEntity<>(user);

    Mock mock = new Mock(new BigDecimal(20));
    HttpEntity<Mock> request = new HttpEntity<>(mock );

    @Before
    public void setUp() throws MalformedURLException {
        restTemplate = new TestRestTemplate();
        base = new URL("http://localhost:" + port + "/mock/users");
        restTemplate.postForEntity(base.toString(), userRequest, String.class);

        restTemplate = new TestRestTemplate(user.getUsername(), user.getPassword());
        base = new URL("http://localhost:" + port + "/mock/mocks");
    }

    @Test
    public void wrongUserAuth_ThenFailed() throws IllegalStateException {
        restTemplate = new TestRestTemplate("test", "test");
        ResponseEntity<String> response = restTemplate.postForEntity(base.toString(), request, String.class);

        assertEquals(HttpStatus.UNAUTHORIZED, response.getStatusCode());
    }

    @Test
    public void createTwoAccountsForTheSameUser_ThenFailed() throws IllegalStateException {
        restTemplate.postForEntity(base.toString(), request, String.class);
        ResponseEntity<String> responseTwo = restTemplate.postForEntity(base.toString(), request, String.class);

        assertEquals(HttpStatus.CONFLICT, responseTwo.getStatusCode());
        assertTrue(responseTwo
            .getBody()
            .contains("mock"));
    }

    @Test
    public void createAccountDuringWeekend_ThenFailed() throws IllegalStateException {
        LocalDate date = LocalDate.of(2000, 1, 1);
        PowerMockito.stub(PowerMockito.method(LocalDate.class,"now")).toReturn(date);
        ResponseEntity<String> response = restTemplate.postForEntity(base.toString(), request, String.class);

        assertEquals(HttpStatus.CONFLICT, response.getStatusCode());
        assertTrue(response
                .getBody()
                .contains("mock"));
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...