我已经尝试同时使用MockMVC和TestRestTemplate。在这两种情况下,响应都为404,但API端点在集成测试之外工作(当我自己运行spring应用程序时)。
是否有人使用Spring Data Rest对生成的控制器进行了有效的集成测试的示例应用程序正常工作?
我还能够针对自己的控制器(非SDR类型)编写常规的集成测试
测试代码:
@ExtendWith(SpringExtension.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class MyTest {
@Autowired
private TestRestTemplate testRestTemplate;
@Test
public void testApi() {
String settings = testRestTemplate
.getForObject("/api/v1/orders", String.class);
System.out.println(settings);
}
}
回购:
@RepositoryRestResource(excerptProjection = OrderSummaryProjection.class)
public interface OrderRepository extends JpaRepository<Order, Long> {}
好,我发现了问题,但我不知道答案应该是什么:
我在application.properties中设置了spring.data.rest.basePath。
但是我认为在运行集成测试时不会读取该文件。我该如何解决?
@RunWith(SpringRunner.class)
@SpringBootTest
public class DummyIT {
@Autowired
private SettingsRepository settingsRepository;
@Test
public void testApi() {
List<Settings> settings = settingsRepository.findAll();
assertNotNull(settings);
}
}
我也测试了端到端测试,它也可以工作,它只返回难看的{“ _embedded”:{“ settings”:[{...}]},...}因此可行,但并非如此漂亮:
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class DummyTest {
@Autowired
private TestRestTemplate testRestTemplate;
@Test
public void testApi() {
String settings = testRestTemplate
.getForObject("/api/settings", String.class);
System.out.println(settings);
}
}