我可以创建一个没有文件系统和网络访问的 junit 环境吗?我想对我们的测试用例执行更严格的规则。
理想情况下,这可以使用 maven 进行配置,并适用于默认测试阶段。
基于此答案https://stackoverflow.com/a/309427/116509,我认为您可以设置SecurityManager
测试设置并在拆卸时恢复原始设置。
但是,恕我直言,应该允许一些单元测试接触文件系统,例如,如果被测试的类实际上创建文件作为其合同的一部分。(您可以使用依赖注入来确保在临时目录中创建文件)。同样,使用 HTTP 的类的良好单元测试应该针对 HTTP 端点进行测试。否则你最终只会嘲笑一切,你的测试变得毫无价值。我想默认应该是拒绝访问,然后开发人员需要专门覆盖这种测试的权限。
处理这些对文件系统/网络访问的依赖的典型方法是在测试上下文中模拟它们。这样,真正的代码可以通过正常的渠道,但您的测试不必依赖文件系统或网络。
研究模拟框架以帮助您完成很多工作。启用这种测试也会使您的代码更干净。:)
您可以使用Ashcroft禁止在测试中访问文件系统和其他资源。它使用 Java 安全管理器来限制对某些资源的访问。
另一种方法是使用 AspectJ 并实现几个禁止调用某些 API 或包的建议。
我不确定您所说的 JUnit 环境是什么意思,但您不需要文件系统或网络访问来运行单元测试。另一方面,如果您正在测试使用网络和文件系统 API 的代码,您可能会遇到问题。在这种情况下,您可能需要将代码抽象为更小的可测试块。您不应该在单元测试中测试网络和文件系统 API 是否正常工作,这些是集成测试。您应该只在单元测试中测试您的代码。