我正在使用 JUnit 4 和 MockMvc 测试 REST 控制器。当我几周前编写测试时,一切都按预期工作。我对代码进行了一些修改,但没有更改 JUnit 测试。现在,当我尝试运行测试时,出现错误:
Caused by: java.io.FileNotFoundException: Could not open ServletContext resource [/application.properties]
这是我的代码:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = MyServerApplication.class)
@SpringBootTest
@Transactional
public class MovieControllerTest {
private MockMvc mockMvc;
@Autowired
private MovieRepository movieRepository;
@Autowired
private WebApplicationContext wac;
@Before
public void setup() {
this.mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
}
// Some tests
}
我的主要课程:
@SpringBootApplication
public class MyServerApplication{
public static void main(String[] args) {
SpringApplication.run(MyServerApplication.class, args);
}
}
我的application.properties
文件位于src/main/resources
. 我没有移动这个文件,我什么也没做,只是在我的服务中添加了一些代码并在我的文件中添加了一些属性。
我阅读了 SO questions & doc,并尝试了以下解决方案:
- 检查它
src/main/resources
是否仍在我的测试类路径中 @PropertySource("classpath:application.properties")
在我的测试中的注释下添加;它没有用,所以我尝试src/test/resources
用里面的副本创建一个application.properties
,如一篇帖子中所建议的那样- 添加
@PropertySource("classpath:application.properties")
主类而不是测试类 - 添加
@WebAppConfiguration
注释 - 添加
@WebMvcTest
注释
当然,我没有同时尝试所有这些解决方案,每次失败后我都删除了添加的代码。
我仍然可以毫无问题地运行我的代码,只有测试类导致FileNotFoundException
.
如何解决这个问题?为什么我的测试类有问题,但运行服务器时一切正常?