Jan
Jan

Reputation: 2833

JUnit test sandbox without network and file access?

Can I create a junit environment without file system and network access? I want to enforce stricter rules for our test cases.

Ideally, this would be configurable with maven and work for the default test phase.

Upvotes: 1

Views: 1135

Answers (4)

artbristol
artbristol

Reputation: 32407

Based on this answer https://stackoverflow.com/a/309427/116509, I think you could set a SecurityManager on test setup and restore the original on teardown.

However, IMHO, some unit tests should be allowed to touch the file system, if for example the class under test actually creates files as part of its contract. (You can use dependency injection to make sure the files are created in a temp directory). Likewise, a good unit test of a class that uses HTTP should test it against an HTTP endpoint. Otherwise you just end up mocking everything and your test becomes worthless. I suppose the default should be to deny access, and then a developer would need to specifically override the permissions for this kind of test.

Upvotes: 1

aglassman
aglassman

Reputation: 2653

I'm not sure what you mean by JUnit environment, but you should not need a file system, or network access to run unit tests. On the other hand, if you are testing code that uses network and filesystem APIs, you may have an issue. In that case, you may need to abstract your code into smaller testable chunks. You should not be testing weather the network and filesystem APIs are working in a unit test, these are integration tests. You should only be testing your code in unit tests.

Upvotes: 0

Eugene Kuleshov
Eugene Kuleshov

Reputation: 31795

You can use Ashcroft to prohibit access to file system and other resources from your tests. It uses Java Security manager to restrict access to certain resources.

Another approach would be to use AspectJ and implement several advices prohibiting calling certain APIs or packages.

Upvotes: 0

Oleksi
Oleksi

Reputation: 13097

The typical way to handle these dependancies on a file system/network access, is to mock them out in a test context. This way, the real code can go through the normal channels, but your tests don't have to rely on a file system or a network.

Look into mocking frameworks to help you do a lot of this. Enabling this kind of testing will also make your code cleaner, too. :)

Upvotes: 0

Related Questions