2012-06-12 39 views
1

我可以在没有文件系统和网络访问的情况下创建junit环境吗?我想对我们的测试用例执行更严格的规则。没有网络和文件访问的JUnit测试沙箱?

理想情况下,这可以使用maven和默认测试阶段的工作进行配置。

回答

1

根据这个答案https://stackoverflow.com/a/309427/116509,我想你可以在测试设置上设置一个SecurityManager,并在拆卸时恢复原来的状态。

但是,恕我直言,一些单元测试应该允许触及文件系统,例如,如果被测试的类实际上创建文件作为其合同的一部分。 (您可以使用依赖注入来确保文件在临时目录中创建)。同样,使用HTTP的类的单元测试应该针对HTTP端点进行测试。否则,你最终会嘲笑一切,你的测试变得毫无价值。我想默认应该是拒绝访问,然后开发人员需要专门覆盖这种测试的权限。

+0

这工作(至少从我的junit测试日食)。我目前试图找出为什么它不适用于maven。一旦我成功,我会更新帖子。 – Jan

0

在文件系统/网络访问中处理这些依赖关系的典型方法是在测试环境中将它们模拟出来。这样,真正的代码可以通过正常的渠道,但您的测试不必依靠文件系统或网络。

研究嘲笑框架,以帮助你做很多事情。启用这种测试也将使您的代码更清洁。 :)

+0

我这样做我的类/接口。我想为所有的comitters创建一个约束,所以没有人偶然使用network或unix文件系统作为依赖。 – Jan

0

您可以使用Ashcroft禁止从测试中访问文件系统和其他资源。它使用Java安全管理器来限制对特定资源的访问。

另一种方法是使用AspectJ并实现几个禁止调用某些API或包的建议。

0

我不确定您的意思是JUnit环境,但您不需要文件系统或网络访问来运行单元测试。另一方面,如果您正在测试使用网络和文件系统API的代码,则可能有问题。在这种情况下,您可能需要将代码抽象为更小的可测试块。你不应该测试天气网络和文件系统API在单元测试中工作,这些是集成测试。您应该只在单元测试中测试您的代码。

+0

您重复了一般junt模式,但您如何执行它们? – Jan

+0

同行代码审查对于执行这些类型的约束非常有用。只需将其作为代码审批清单的优先级即可。 – aglassman